计算机网络知识点复习(三)

21.TCP状态机。

网络上的传输是没有连接的,包括TCP也是一样的。而TCP所谓的"连接",其实是由通讯的双方维护一个"连接状态",让它看上去好像有连接一样。所以,TCP的状态变换是非常重要的。

下面是TCP协议的状态机

下面是 "TCP建链接"、"传数据"、"TCP断链接" 的对照图:

 

22.三次握手的过程与建立连接时需要注意的要点。

连接建立过程中要解决以下三个问题:

(1)要使每一方能够确知对方的存在。

(2)要允许双方协商一些参数(如最大报文段长度,最大窗口大小,服务质量等)。

(3)能够对运输实体资源(如缓存大小,连接表中的项目等)进行分配。

TCP连接的建立都是采用客户服务器方式。

主动发起连接建立的应用进程叫做客户(client)。被动等待连接建立的应用进程叫做服务器(server)。

需要注意的问题:

(1)关于ISN。3次握手的过程中会初始化Sequence Number 的初始值。通信的双方要互相通知对方自己的初始化的seq(缩写为ISN:Inital Sequence Number)。也就上图中的x和y。这个号作为以后的数据通信的序号,以保证应用层接收到的数据不会因为网络上的传输的问题而乱序(TCP会用这个序号来拼接数据)。ISN是不能硬编码的,否则会出问题。比如连接建好后始终用1来做ISN,如果client发了30个字节过去,但是网络断了,于是client重连后又用了1做ISN,但是之前连接的那些包到了,于是就被当成了新连接的包,此时client的seq=3,而Server端认为client端的seq=30了,这样就会出现错误。RFC793中描述了ISN会和一个假的时钟绑在一起,这个时钟会在每4微秒对ISN做加一操作,直到超过232后又从0开始。这样一个ISN的周期大约是4.55个小时。只要TCP报文段在网络上的存活时间MSL(Maximum Segment Lifetime)不超过4.55小时,那么就不会发生ISN重用。

(2)关于建连接时SYN超时。试想如果server端接到了client发送的SYN且回复了SYN-ACK后client掉线了,server端没有收到client回来的ACK,那么这个连接处于一个中间状态,既没成功也没失败。于是server端如果在一定时间内没有收到的TCP会重发SYN-ACK。在Linux下,默认重试次数为5次,重试的间隔时间从1s开始每次都翻倍,5次的重试时间间隔为1s, 2s, 4s, 8s, 16s,总共31s,第5次发出后还要等32s都知道第5次也超时了,所以总共需要 1s + 2s + 4s+ 8s+ 16s + 32s = 26 -1 = 63s,TCP才会把这个连接断开。

(3)关于SYN Flood攻击。利用SYN超时的行为,可以进行SYN Flood攻击,即给服务器发送一个SYN后就下线,服务器默认需要等待63s才会断开连接,这样攻击者就可以把服务器SYN连接的缓存队列耗尽,使之不能处理正常的连接请求。Linux下给出了参数tcp_syncookies来应对这个问题,当SYN队列满后,TCP会通过源地址端口、目标地址端口和时间戳生成一个特别的seq值发回去(又叫cookie),如果是攻击者或已掉线的主机则不会有响应,如果是正常连接则会把这个 SYN Cookie在ack字段中发回来,然后服务端即可与其建立连接。请注意,请不要优先使用tcp_syncookies来处理正常的大负载连接情况,因为syncookies是妥协版的TCP协议,并不严谨。

(4)对于正常的大负载情景,有三个TCP参数可供选择。

第一个是:tcp_synack_retries,用来设置重试次数,可将重试次数减少;

第二个是:tcp_max_syn_backlog,用来设定SYN缓存队列大小,可以增大同时存在的SYN连接数;

第三个是:tcp_abort_on_overflow,可以使服务器在处理不过来时直接拒绝连接。

 

23.四次挥手的过程与结束过程各个状态的要点。

因为TCP是全双工的,所以发送方和接收方都需要FIN和ACK,即挥手2次,所以共有4次挥手。

结束过程可能出现6种状态(上图出现5种)。分别是:

FIN-WAIT-1        等待被动端TCP的FIN请求,或先前的发送FIN请求的ACK回应;

FIN-WAIT-2        等待被动端TCP的FIN请求;

CLOSE-WAIT    等待应用程序发送最后的数据,并在之后向主动端发送FIN;

LAST-ACK        等待主动端对被动端FIN请求的ACK回应;

TIME-WAIT        等待一定的时长,2MSL后主动端才能真正释放连接;

CLOSING        等待对端TCP对己端FIN的ACK回应,此时双方对等,不区分主被动。

如果双方同时断连接,就都会进入到CLOSING状态,并且双方都会在之后进入TIME_WAIT状态。下图是双方同时断连接的示意图:

需要注意的问题:

(1)关于 MSL 和 TIME_WAIT。在结束过程中,从TIME_WAIT状态到CLOSED状态时,有一个计时器,这个计时器设置为2*MSL(RFC793定义了MSL为2分钟,Linux设置成了30s)这样做主要有两个原因:1)TIME_WAIT期间,主动端可以确保有足够的时间让对端收到了ACK,如果被动端没有收到ACK,就会触发重传FIN,一来一去正好2个MSL;2)有足够的时间让这个连接不会跟后面的连接混在一起,有些路由器会缓存IP数据包,如果连接被重用了,那么这些延迟收到的包就有可能会跟新连接的数据包混在一起。

(2)关于TIME_WAIT数量太多。TIME_WAIT是个很重要的状态,但是如果在大并发短链接的场景下,TIME_WAIT就会太多,这也会消耗很多系统资源。Linux下存在参数tcp_max_tw_buckets,描述控制并发的TIME_WAIT的数量,默认值是180000,超限后系统会把多余的TIME_WAIT销毁,官网文档描述这个参数是用来对抗DDoS攻击的,并且认为默认值180000并不小,需要根据实际情况考虑。

另外网络上常见的,使用参数tcp_tw_reuse和tcp_tw_recycle来解决TIME_WAIT数量太多的问题是非常危险的,因为这两个参数违反了TCP协议。

另外,只有主动断开连接的一方才会进入TIME_WAIT状态,所以如果让对端断连接,那么TIME_WAIT数量的问题就是对方的了。

 

24.使用TCP协议的常见应用层协议

端口号        协议名称                  缩写            英文全称

20, 21        文件传输协议            FTP             File Transfer Protocol

22              安全壳                      SSH            Secure Shell

23              远程登录协议            Telnet        -

25, 465      简单邮件传输协议      SMTP         Simple Mail Transfer Protocol

80              超文本传输协议         HTTP          Hypertext Transfer Protocol)

110, 995  邮局协议-版本3         POP3         Post Office Protocol - Version 3

143, 993    互联网邮件访问协议   IMAP         Internet Mail Access Protocol

443            超文本传输安全协议  HTTPS        Hypertext Transfer Protocol Secure

445            信息服务块                SMB           Server Message Block

 

25.IPv6相关知识

IPv6(Internet Protocol version 6)互联网通信协议第6版是互联网协议的最新版本,用于数据包交换互联网络的网络层协议,旨在解决IPv4地址枯竭问题。IPv6意图取代IPv4,但IPv4在仍然在网络上占有较大份额。在大多数情况下,IPv6仅仅是对IPv4的一种保守扩展,大多数传输层和应用层协议几乎不怎么需要修改就可以工作在IPv6上。

NAT是目前减缓IPv4地址耗尽最有效的方式,而IPv6的地址消除了对它的依赖,并被认为足够在可以预测的未来使用。IPv6具有比IPv4大得多的编码地址空间。因为IPv6采用了128位的地址,其地址空间可支持2128个地址。IPv6地址一般由两个逻辑部分组成:一个64位的网络前缀和一个64位的主机地址,主机地址通常根据物理地址自动生成。

IPv6地址的长度为128位二进制数,以16位为一组,每组以冒号隔开,可以分为8组。一般每组以4位十六进制数表示,因此一遍可以表示为32个十六进制数。例如:

2006:0db8:85a3:08d3:13c9:8a2e:0370:7344是一个合法的IPv6地址。

IPv6地址在某些条件下可以使用省略记法,以下是省略规则:

1)每组中前导的数字0可以省略,省略后前导数字仍是0则继续;

2)可以用双冒号"::"表示一组0或多组连续的0,但只能出现一次。

例如,以下的IPv6地址是相等的:

2001:0db8:02de:0000:0000:0000:0000:ae13

2001:db8:2de:000:000:000:000:ae13

2001:db8:2de:0:0:0:0:ae13

2001:db8:2de::ae13

注意双冒号只能出现一次,有的省略记法是错误的,因为双冒号出现两次。下面这个IPv6是非法的:

2001::25de::cade

因为它有可能是下种情形之一,造成无法推断。

2001:0000:0000:0000:0000:25de:0000:cade        2001:0000:0000:0000:25de:0000:0000:cade

2001:0000:0000:25de:0000:0000:0000:cade        2001:0000:25de:0000:0000:0000:0000:cade

 

26.计算机网络中的常见缩写

缩写        英文全称                                                    备注

ACK        Acknowledge                                           TCP状态标志,确认

ack          Acknowledge                                          TCP确认号字段

ARP        Address Resolution Protocol                 地址解析协议

ARQ        Automatic Repeat-reQuest                   滑动窗口的原理

BGP        Border Gateway Protocol                       边际网关协议

CIDR        Classless Inter Domain Routing            无分类域间路由

CRC          Cyclical Redundant Check                     循环冗余检验

cwnd        Congestion Window                              拥塞窗口

D-ACK     Duplicated ACK                                        重复确认(3次)

DHCP      Dynamic Host Configuration Protocol    动态主机配置协议

DNS        Domain Name System                              域名系统

D-SACK   Duplicated SACK                                      重复选择确认

FIN           Finish                                                       TCP状态标志,结束

FTP          File Transfer Protocol                             文件传输协议

HTTP        Hyper Text Transfer Protocol                超文本传输协议

ICMP        Internet Control Message Protocol       互联网控制消息协议

IETF          Internet Engineering Task Force            互联网工程任务组

IGMP       Internet Group Management Protocol  互联网组管理协议

IMAP        Internet Mail Access Protocol                互联网邮件访问协议

IP              Internet Protocol                                    互联网通信协议

ISN           Initial Sequence Number                        初始序列号

MAC        Medium Access Control                          介质访问控制

MSL        Maximum Segment Lifetime                   最大报文生存时间

MSS        Maximum Segment Size                          最大报文长度

MTU        Maximum Transmission Unit                最大传输单元

NAT        Network Address Translation                网络地址转换

OSI          Open System Interconnection                开放式系统互联参考模型

OSPF        Open Shortest Path First                       开放式最短路径优先

PING        Packet Inter Net Groper                        网络间包探测器

POP3        Post Office Protocol Version 3            邮局协议-版本3

PPP          Point to Point Protocol                          点对点协议

PSH          Push                                                        TCP状态标志,推送

RARP       Reverse ARP                                          反向地址解析协议

RFC        Request For Comments                         征求修正意见书

RIP        Routing Information Protocol                内部网关协议

RST        Reset                                                        TCP状态标志,重置

RTO        Retransmission Time Out                      重传超时时限

RTT        Round Trip Time                                     往返时延

SACK      Selective ACK                                         选择性确认

seq         Sequence    TCP                                     序号字段

SMB       Server Message Block                           信息服务块

SMTP     Simple Mail Transfer Protocol              简单邮件传送协议

SNMP    Simple Network Management Protocol   简单网络管理协议

SRTT      Smoothed RTT                                       平滑后的往返时延

SSH        Secure Shell                                            安全壳

ssthresh    Slow Start Threshold                          慢开始门限

SYN        Synchronize                                            TCP状态标志,同步

TCP        Transmission Control Protocol              传输控制协议

TFTP      Trivial File Transfer Protocol                  简单文件传输协议

TTL        Time To Live                                            生存时间

UDP      User Datagram Protocol                         用户数据报协议

URG      Urgent                                                      TCP状态标志,紧急

ZWP      Zero Window Probe                               零窗口探测

 

 

 

参考:

1.计算机网络(第5版),谢希仁。电子工业出版社,2008.1。以及本教材配套课件。

2.《TCP的那些事》,陈皓。

http://coolshell.cn/articles/11564.html,http://coolshell.cn/articles/11609.html

3.维基百科(Wikipedia)和百度百科词条。

 

第一部分:计算机网络知识点复习(一)

第二部分:计算机网络知识点复习(二)

posted @ 2014-09-20 17:08  Superpig0501  阅读(3235)  评论(0编辑  收藏  举报