计算机网路(三)——TCP协议深入分析

一、TCP通信时序

1、三次握手

计算机网路(三)——TCP协议深入分析_第1张图片

首先客服端发起连接,发送请求,然后服务器响应请求,然后客户端主动关闭连接。两条竖线表示这个通讯的两端,从上到小表示时间的先后顺序,注意:数据从一端传到网络的另一端也需要时间,所以图中的箭头都是斜的,双方发送的段按时间顺序编号为1-10,各段中的主要信息在箭头上标出,例如段2的箭头上标着SYN,8000(0),ACK1001,表示段中的SYN位置1,32位序号是8000,该段不携带有效载荷(数据字节数为0),ACK位置1,32位确认序号是1001,带有一个mss(Maximum Segment Size, 最大报文长度)选项值位1024。建立连接(三次握手)的过程:

1、客户端发送一个带SYN标志的TCP报文到服务器,这是三次握手过程中的段1

客户端发出段1,SYN位表示连接请求,序号是1000,这个序号在网络通讯中作临时的地址,每发一个数据字节,这个序号要加1,这样在接收端可以根据序号排出数据包的正确顺序,也可以发现丢包的情况,另外,规定SYN位和FIN位也要占一个序号,这次虽然没发数据,但是由于发了SYN位,因此下次再发送应该用序号1001。mss表示最大段尺寸,如果一个段太大,封装成帧后超过了链路层的最大帧长度,就必须在IP层分片,为了避免这种情况,客户端声明自己的最大段尺寸,建议服务器端发来的段不要超过这个长度。

2、服务器回应客户端,同时带有ACK和SYN标志,ACK表示对刚才客户端的SYN回应,同时又发送SYN给客户端,询问客户端是否准备好进行数据通讯

服务器发出段2,也带有SYN位,同时置ACK位表示确认,确认序号为1001,表示“我接受到序号1000以及以前所有的段,请你下次发送序号为1001的段”,也就是应答了客户端的连接请求,同时也给客户端发出一个连接请求。同时声明最大帧长度为1024。

3、客户端必须再次回应服务器一个ACK报文

客户端发出段3,对服务器的请求应答,确认序号是8001,在这个过程中,客户端和服务器分别给对方发送连接请求,也应答了对方的连接请求,其中服务器的请求和应答在一个段中发出,因此一共有三个段用于建立连接,称为“三次握手”,在建立连接的同时,双方协商了一些信息,例如双发送序号的初始值,最大尺寸。

2、通讯过程

在TCP通讯中,如果一方接收到来自另一方发来的段,读出其中的端口号,发现本本机没有使用这个端口,就会应答一个包含RST位的段给另一方,例如,服务器并没有任何进程使用8080端口,我们却用telent客户端去连接它,服务器收到客户端发来的SYN段就会应答一个RST段,客户端的telent程序收到RST段后报告错误。

数据传输的过程;

1、客户端发出段4,包含从序号1001开始的20个字节数据。(因为服务器端在上次发送ACK8001应答之后没有返回数据,所以会再次发送ACK8001,即请求服务器从8001序号开始发送数据)

2、服务器发出段5,确认序号为1021,对序号为1001-1020的数据表示确认收到,同时请求发送序号为1021开始的数据;服务器在应答的同时也向客户端发送序号8001开始的10个自己数据。

3、客户端发出段6,对服务器发出来的序号为8001-8010的数据表示确认收到,请求发送序号为8011开始的数据。

在数据传输过程中,ACK和确认序号是非常重要的,应用程序交给TCP协议发送的数据会暂存在TCP层的发送缓冲区中,发出数据包给对方之后,只有收到对方应答的ACK段才知道该数据包确实发送给了对方,可以从缓冲区中释放掉了,如果因为网络故障丢失了数据包或者丢失了对方发回的ACK段,经过等待超时后TCP协议自动将发送缓冲区的数据包重发。

3、关闭连接(四次握手)的过程

由于TCP连接时全双工的,因此每个方向都必须单独进行关闭,这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止 这个方向的连接,收到一个FIN意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据,首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。

1、客户端发出段7,FIN位表示关闭连接的请求。

2、服务器端发出段8,应答客户端的关闭连接请求。

3、服务器端发出段9,其中包含FIN位,向客户端发送关闭连接请求。

4、客户端发出段10,应答服务器的关闭连接请求。

建立连接的过程是三次握手,而关闭连接通常需要4个段,服务器的应答和关闭连接请求通常不合并一个段中,因为有连接半关闭的情况,这种情况下,客户端关闭连接之后就不能再发送数据给服务器了,但是服务器还可以发送数据给客户端,直到服务器也关闭连接为止。

 

二、滑动窗口(TCP流量控制)

在UDP中存在这样的问题,如果发送端发送的速度较快,接收端接收到数据后处理的速度较慢,而接收缓冲区的大小是固定的,就会丢失数据,TCP协议通过“滑动窗口”机制来解决这一问题。通讯过程如下:

计算机网路(三)——TCP协议深入分析_第2张图片

1、发送端发起连接,声明最大尺寸是1460,初始序号是0,窗口大小是4k,表示“我的接收缓冲区还有4l字节空闲,你发的数据不要超过4k”,接收端应答连接请求,声明最大段尺寸是1024,初始序号是8000,窗口大小是6k。发送端应答,三方握手结束。

2、发出端发出段4-9,每个段带1k的数据,发送端根据窗口大小知道接收端的缓冲区满了,因此停止发送数据。

3、接收端的应用程序提走2k数据,接收缓冲区又有了2k空闲,接收端发出段10,在应答已收到6k数据的同时声明窗口大小为2k。

4、接收端的应用程序又提走了2k数据,接收缓冲区有了4k空闲,接收端发出段11,重新声明窗口大小为4k。

5、发送端发出段12-13,每个段带2k数据,段13同时还包含FIN位。

6、接收端应答收到的2k数据(6145-8192),再加上FIN位占一个序号8193,因此应答序号是8194,连接处于半关闭状态,接收端同时声明窗口大小为2k。

7、接收端的应用程序分两次提取完数据,接收缓冲区为空,接收端重新声明窗口大小为6k。

8、接收端的应用程序在提取走全部数据后,决定关闭连接,发出段17包含FIN位,发送端应答,连接完全关闭。

 

三、一些名词解释

1、半关闭

当TCP连接中,A发送FIN请求关闭,B端回应ACK后(A端进入FIN_WAIT_2状态),B没有立即发送FIN给A时,A方处在半连接状态,此时A可以接收B发送的数据,但是A不能再向B发送数据。

2、2MSL

(1)什么是2MSL:

MSL是Maixinum Segment Lifetime 英文的缩写,中文可译为“报文最大生存时间”,它是任何报文在网络上存在的最大时间,超过这个时间报文就被丢弃。   因为TCP报文是IP数据报的数据部分,而IP头部有一个TTL域,TTL是time to live的缩写,中文可译为“生存时间”,这个生存时间是由源主机设置初始值但不是存在的具体时间,而是存储了一个ip数据报可以经过的最大路由数,每经过它的路由器,此值就减1,当此值为0时则数据报被丢弃,同时发送ICM报文通知源主机。

 2MSL即两倍的MSL,TCP的TIME_WAIT状态也称为2MSL等待状态,当TCP的一端发起主动关闭,在发出最后一个ACK包后,即第3次握手完成后发送了第四次握手的ACK包后就进入了TIME_WAIT状态,必须在此状态上停留两倍的MSL时间,等待2MSL时间主要目的是怕最后一个ACK包对方没收到,那么对方在超时后将重发第三次握手的FIN包,主动关闭端接到重发的FIN包后可以再发一个ACK应答包。在TIME_WAIT状态时两端的端口不能使用,要等到2MSL时间结束才可继续使用。当连接处于2MSL等待阶段时任何迟到的报文段都将被丢弃。不过在实际应用中可以通过设置SO_REUSEADDR选项达到不必等待2MSL时间结束再使用此端口。

(2)2MSL的TIME_WAIT状态存在的两个理由:

(1)让4次握手关闭流程更加可靠;4次握手的最后一个ACK是由主动关闭方发送出去的,若这个ACK丢失,被动关闭方会再发送一个FIN过来,若主动关闭方能保持一个2MSL的TIME_WAIT状态,则有更大的机会让丢失的ACK被再次发送出去。

(2)A在发送完ACK报文段后,再经过2MSL时间,就可以使本地连续持续的时间所产生的所有报文段从网络中消失。使得下一个新的连接中不会出现旧的连接请求的报文段。

3、端口复用

在A机上进行客户端网络编程,假如它使用的本地端口号是1234,如果没有开启端口复用,它用本地端口1234去连接B机再用本地端口连接C机时就不可以,若开启端口复用的话用本地端口1234访问B机的情况下还可以用本地端口1234访问C机。若是服务器程序中监听的端口,即使开启了复用,也不可以用该端口往外发起连接。

4、路由:

(1)名词解释:

(a)数据包从源地址到目的地址经过的路径,由一系列的路由节点组成。

(b)某个路由节点为数据包选择投递方向的选路过程。

(2)路由器工作原理:

路由器是连接因特网中各局域网、广域网的设备,它会根据信道的情况自动选择和设定路由,以最佳路径,按前后顺序发送信号的设备

传统地,路由器工作与OSI七层协议中的第三层——网络层,其主要任务是接收来自一个网络接口的数据包,根据其中所含的目的地址,决定转发到下一个目的地址。因此路由器首先得在转发路由表中查找它的目的地址。因此,路由器首先得在转发路由表中找到它的目的地址,若找到了目的地址,就在数据包的帧格前添加下一个MAC地址,同时IP数据报头的TTL域也开始减数,并重新计算校验和,当数据包被送到输出端口时,它需要按顺序等待,以便被传送到输出链路上。

路由器在工作是能够按照某种路由通信协议查找设备中的路由表。如果到某一特点节点有一条以上的路径,则基本预先确定的路由准则是选择最优(或最经济)的传输路径由于各种网络段和其相互连接情况可能会因环境变化而变化,因此路由情况的信息也一般按所使用的路由信息协议的规定而定时更新。

网络中,每个路由器的基本功能都是按照一定的规则来动态地更新它所保持的路由表,以便保持路由信息的有效性。为了便于在网络间传送报文,路由器总是先按照预定的规则把较大的数据分解成适当大小的数据包,再将这些数据包分别通过相同或不同路径发送出去。当这些数据包按先后秩序到达目的地后,再把分解的数据包按照一定顺序包装成原有的报文形式。路由器的分层寻址功能是路由器的重要功能之一,该功能可以帮助具有很多节点站的网络来存储寻址信息,同时还能在网络间截获发送到远地网段的报文,起转发作用;选择最合理的路由,引导通信也是路由器基本功能;多协议路由器还可以连接使用不同通信协议的网络段,成为不同通信协议网络段之间的通信平台。

路由和交换之间的主要区别就是交换发生在OSI参考模型第二层(数据链路层),而路由发生在第三层,即网络层。这一区别决定了路由和交换在移动信息的过程中使用不同的控制信息,所以两者在实现功能的方式是不同的。

(3)路由表

在计算机网络中,路由表或称路由择域信息库(RIB)是一个存储在路由器或者联网计算机中的电子表格(文件)或类数据库。路由表存储着指向特定网络地址的路径。

(4)路由条目

路由表中的一行,每个条目主要由目的网络地址、子网掩码、下一跳地址、发送接口四部分组成,如果发送的数据包的目的网络地址匹配路由表中的某一行,就按规定的接口发送到下一跳地址。

(5)缺省路由条目

路由表中的最后一行,主要由下一跳地址和发送接口两部分组成当目的地址与路由表中其他都不匹配时,就按缺省路由条目规定的接口发送到下一跳地址。

(6)路由节点

一个具有路由能力的主机或路由器,它维护一张路由表,通过查询路由表来决定向哪个接口发送数据包。

(7)以太网交换机工作原理

以太网交换机是基于以太网传输数据的交换机,以太网采用共享总线型传输媒体方式的局域网。以太网交换机的结构是每个端口都直接与主机相连,并且一般都工作在全双工方式。交换机能同时连通许多对端口,使每一对相互通信的主机都能像独占通信媒体那样,进行无冲突地传输数据。

以太网交换机工作与OSI网络参考模型的第二层(即数据链路层),是一种基于MAC(Media Access Control,介质访问控制)地址识别、完成以太网帧转发的网络设备。

(8)hub工作原理

集线器实际上就是中继器的一种,其区别仅在于集线器能够提供更多的端口服务,所以集线器又叫多口中继器。

集线器功能是随机选出某一端口的设备,并让它独占全部带宽,与集线器的上联设备(交换机、路由器或服务器等)进行通信。从hub的工作方式可以看出,它在网路中只起信号放大和重发作用,其目的是扩大网络的传输范围,而不具备信号的定向传输能力,是一个标准的共享式设备。其次是Hub只与它的上联设备(如上层Hub、交换机或服务器)进行通信,同层的各窗口之间不会直接进行通信,而是通过上联设备再将信息广播到所有端口上。由此可见,即时是在同一Hub的不同两个端口之间进行通信,都必须要经过两部操作:

第一步是将信息上传到上联设备。

第二步是上联设备再将该信息广播到所有端口上。

5、半双工、全双工 

全双工是在通道中同时双向数据传输的能力。

半双工在通道中同时只能沿着一个方向传输数据。

6、DNS服务器

DNS是域名系统的缩写,是因特网的一项核心服务,它作为可将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被及其直接读取的IP地址串。

它是由解析器及域名服务器组成的。域名服务器是指保存有该网络中所有主机的域名和对应IP地址,并具有将域名转化为IP地址功能的服务器。

7、局域网(LAN)

local area network,一种覆盖一座或几座大楼,一个校园或者一个厂区等地理区域的小范围的计算机网。

1、覆盖的地理范围较小,只在一个相对独立的局部范围内联,如一座或集中的建筑群内。

2、使用专门铺设的传输介质进行联网,数据传输速率较高(10Mb/s~10Gb/s)

3、通信延迟时间短,可靠性较高

4、局域网可以支持多种传输介质

8、广域网(WAN)

wide area network,一种用来实现不同地区的局域网或城域网的互连,可提供不同地区,城市和国家之间的计算机通信的远程计算机网。

覆盖的范围比局域网(LAN)和城域网(MAN)都广。广域网的通信子网主要使用分组交换技术。

广域网的通信子网可以利用公用分组交换网、卫星通信网和无线分组交换网,它将分布在不同地区的局域网或计算机系统互连起来,达到资源共享的目的。如互联网是世界范围内最大的广域网。

1、适应大容量与突发性通信的要求;

2、适应综合业务服务的要求;

3、开放的设备接口与规范化的协议;

4、完善的通信服务与网络管理。

9、端口

逻辑意义上的端口,一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。

1、端口号小于256的定义为常用端口,服务器一般都是通过常用端口来识别的。

2、客户端只需要保证该端口号在本机上是唯一的就可以了。客户端端口号因存在时间很短又称临时端口号;

3、大多数TCP/IP实现给临时端口号分配1024~5000之间的端口号,大于5000的端口号是为其他服务器预留的。

我们应该在自定义端口时,避免使用well-known的端口。如:80、21等等。

10、MTU

MTU:通信术语 最大传输单元(Maximum Transmission Unit,MTU)。

是指一种通信协议的某一层面上面所能通过的最大数据包大小(以字节为单位)。最大传输单元这个参数通常与通信接口有关。

以下是一些协议的MTU:

FDDI协议:4352字节

以太网(Ethemet)协议:1500字节

PPPoE(ADSL)协议:1492字节

X.25协议(Dial Up/Modem):576字节

Point-to-Point:4470字节

 

 

              

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 



h

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

为了便于在网络中传送报文,路由器总是先按照预定的规则把较大的数据分解成适当大小的数据包,再将这些数据包分别通过相同或不同路径发送出去,

当这些数据包按先后秩序到达目的地后,再把分解的数据包按照一定顺序包装成原有的报文形式。路由器的分层寻址功能是路由器的重要功能之一,该功能可以帮助具有很多节点站的网络来存储寻址信息,同时还能在网络间截获发送到远地网段的报文,起转发作用;选择最合理的路由,引导通信也是路由器的基本功能;多协议路由器还可以连接使用不同通信协议的网络段,称为不同通信协议网络段之间的通信平台。

你可能感兴趣的:(计算机网络)