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

TCP/IP协议

时间:2018-08-11 22:35:19      阅读:227      评论:0      收藏:0      [点我收藏+]

标签:ali   any   全双工   margin   没有   png   紧急   rarp   smis   

TCP/IP协议



    一、TCP/IP 来由       

        在世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别。计算机使用者意识到,计算机只是单兵作战并不会发挥太大的作用。只有把它们联合起来,电脑才会发挥出它最大的潜力。于是人们就想方设法的用电线把电脑连接到了一起。

        但是简单的连到一起是远远不够的,就好像语言不同的两个人互相见了面,完全不能交流信息。因而他们需要定义一些共通的东西来进行交流,TCP/IP就是为此而生。



    二、TCP/IP 定义

        TCP/IP(Transmission Control Protocol/Internet Protocol)是传输控制协议和网络协议的简称,它定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准。

        TCP/IP 不是一个协议,而是一个协议族的统称,里面包括了 IP 协议、ICMP 协议、TCP 协议、以及 http、ftp、pop3、https 协议等。网络中的计算机都采用这套协议族进行互联。



    三、TCP/IP模型框架

技术分享图片


        (1)应用层:应用程序通过这一层访问网络,常见 FTP、HTTP、DNS 和 TELNET 协议;

        (2)传输层:TCP 协议和 UDP 协议;

        (3)网络层:IP 协议,ARP、RARP 协议,ICMP 协议等;

        (4)网络接口层:是 TCP/IP 协议的基层,负责数据帧的发送和接收



    四、TCP/IP数据报文

技术分享图片

            源端口(Source Port):16bit, 表示报文发送方的端口号

            目的端口(Destination port): 16bit,表示报文接收方的端口号

            数据序号(seq),32位,TCP为发送的每一个字节都编一个号码,这里存储当前数据包数据第一个字节的序号。

            确认序号(ack),32位,为了安全,TCP告诉接受者希望他下次接到数据包的第一个字节的序号。

            URG(Urgent):表示紧急(The urgent pointer) 指针是否有效。

            ACK(Acknowledgment):1表示这是一个确认的TCP包, 0则不是确认包。

            PSH(Push):该标志置位时,一般是表示发送端缓存中已经没有待发送的数据,接收端不将该数据进行队列处理,而是尽可能快将数据转由应用处理。

            RST(Reset):用于复位相应的TCP连接。通常在发生异常或者错误的时候会触发复位TCP连接。

            SYN(Synchronize):表示同步序列编号(Synchronize Sequence Numbers)是否有效。该标志仅在三次握手建立TCP连接时有效。它提示TCP连接的服务端检查序列编号,该序列编号为TCP连接发起端(一般是客户端)的初始序列编号。在这里,可以把TCP序列编号看作是一个范围从0到4,294,967,295的32位计数器。通过TCP连接交换的数据中每一个字节都经过序列编号。在TCP报头中的序列编号栏包括了TCP分段中第一个字节的序列编号。

            FIN(Finish):带有该标志置位的数据包用来结束一个TCP会话,但对应端口仍处于开放状态,准备接收后续数据。当FIN标志有效的时候我们称呼这个包为FIN包。



    五、TCP/IP的建立连接协议(三次握手)

技术分享图片

        

        1)第一次握手:客户将标志位SYN置为1,随机产生一个值seq=x,并将该数据包发送给服务器,客户进入SYN_SENT状态,等待服务器确认。
        2)第二次握手:服务器收到数据包后由标志位SYN=1知道Client请求建立连接,服务器将标志位SYN和ACK都置为1,ack=x+1,随机产生一个值seq=y,并将该数据包发送给Client以确认连接请求,服务器进入SYN_RCVD状态。
        3)第三次握手:客户收到确认后,检查ack是否为x+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=y+1,并将该数据包发送给服务器服务器检查ack是否为y+1,ACK是否为1,如果正确则连接建立成功,客户服务器进入ESTABLISHED状态,完成三次握手,随后客户服务器之间可以开始传输数据。



  六、TCP/IP的终止连接协议(四次挥手)

技术分享图片


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

    (1)第一次挥手:客户发送一个FIN,用来关闭客户到服务器的数据传送,客户进入FIN_WAIT_1状态。
    (2)第二次挥手:服务器收到FIN后,发送一个ACK给客户,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),服务器进入CLOSE_WAIT状态。
    (3)第三次挥手:服务器发送一个FIN,用来关闭服务器到Client的数据传送,服务器进入LAST_ACK状态。

    (4)第四次挥手:客户收到FIN后,客户进入TIME_WAIT状态,接着发送一个ACK给服务器,确认序号为收到序号+1,服务器进入CLOSED状态,完成四次挥手。

        上面是一方主动关闭,另一方被动关闭的情况,实际中还会出现同时发起主动关闭的情况,具体流程如下图:

技术分享图片

    (1)第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。

    (2)第二次挥手:Server也发送一个FIN用来关闭ServerClient的数据传送,Server进入FIN_WAIT_1状态

    (3)第三次挥手:Client发送一个ACK给Server,ack=J+1,Client进入CLOSING状态,并且Server收到后进入TIME_WAIT状态

    (4)第四次挥手:Server也发送一个ACK给Client,ack=J+1,Server进入CLOSING状态,并且Client收到后进入TIME_WAIT状态。



    

    七两台主机网络掩码不一致可能导致ping不通的问题

        假设PCB 172.18.0.6的掩码是技术分享图片255.255.0.0,PCA172.18.5.7的掩码是技术分享图片255.255.255.0,他俩为啥ping不通,当技术分享图片172.28.0.6给技术分享图片172.18.5.7发数据包的时候,技术分享图片172.18.0.6是按照技术分享图片255.255.0.0来判断技术分享图片172.18.5.7和自己是不是一个网段。可就是ping不同

        ping操作其实是一次双向通信过程

        其次,ping操作的实际内涵是什么?看下面的步骤:

            (1)由本机构造一个ICMP请求包,发送给目的主机;

            (2)目的主机处理后构造一个ICMP响应包,返回给本机;

            (3)本机根据是否收到响应包,以及响应包的内容得到本次ping的结果,并交由显示器呈现给用户。

        也就是说,一次成功的ping操作其实是一次完整的双向通信过程,并非只要本机能将请求发送出去就算好了的。数据包要能出得去,更要回得来。

        分析一下错误过程:

        1.当PCB构造好ICMP请求包打算发送给PCB时,其处理过程应当如下:

        PCB首先将PCA的IP地址172.18.5.7与自己的掩码255.255.0.0做与运算,得到它所认为的PCA的网络号:id=172.18.0.0

        然后用这个newid与自己的网络号id=172.18.0.0 作比较,发现一样;

        PCB把构造好的ICMP请求包直接交付给PCA 。

        PCA处理后构造完成ICMP响应包,打算回给PCB,其处理过程和前文PCA向PCB发送请求包一致,结果是PCA发送响应包失败。
       呈现给你的直观现象就是 PCB ping PCA 不通,系统给出的响应应该是请求超时,原因在于响应回不来。

        2.当PCA构造好ICMP请求包打算发送给PCB时,其处理过程应当如下:

        PCA首先将PCB的IP地址172.18.0.6与自己的掩码255.255.255.0做与运算,得到它所认为的PCB的网络号:id=172.18.1.0,然后用这个newid与自己的网络号id=172.18.0.0 作比较,发现不一样;

        PCA把构造好的ICMP请求包交付给网关,但网关不存在,于是请求发送失败。

       呈现给你的直观现象就是 PCA ping PCB 不通,系统给出的响应应该是:目标主机不可达,原因在于请求出不去。





TCP/IP协议

标签:ali   any   全双工   margin   没有   png   紧急   rarp   smis   

原文地址:http://blog.51cto.com/13805636/2158219

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