美文网首页
day30TCP协议详解\上网基本流程

day30TCP协议详解\上网基本流程

作者: 荭鲤鱼与緑鲤鱼与驴 | 来源:发表于2020-08-12 16:02 被阅读0次
  • TCP协议详解

  • 可靠协议TCP协议

  • 三次握手建立双向链接

  • 三次握手的时候并未传送真正的数据,只是在为了后续发送数据做准备的

  • 先对相关的符号作一下说明:

  • 确认号字段(ack):占四个字节,是期望收到对方的下一个报文段的数据的第一个字节的序号。若ack = N,则表明到序号N-1为止的所有数据都已正确收到。

  • 确认位(ACK):只有当ACK=1时确认号字段才有效。当ACK=0时,确认号无效。

  • 同步位(SYN):同步 SYN=1 表示这是一个连接请求或连接接收报文。当SYN=1,ACK=0时,表明这是一个连接请求报文,对方若同意建立连接,则在响应报文中使用SYN=1,ACK=1。即,SYN=1就表示这是一个连接请求或连接接收报文。 day29三次握手简图.png
  • 链接状态

  • CLOSE : 起始状态,无任何连接;

  • LISTEN : 服务端建立socket之后需要listen进入LISTEN(侦听)模式,侦听来自远方的TCP连接请求。

  • SYN_SENT : 客户端建立socket之后需要connect服务器,向服务端发送seq=x(随机数)申请连接,然后进入SYN_SENT状态。

  • SYN_RECVD : 服务端在**侦听模式 *下收到seq后会向客户端回应ack=x+1,同时发送seq=y,然后进入SYN_RCVD状态。

  • ESTABLISHED : 客户端收到ack后进行验证,同时回应服务端发来的seq,返回ack=y+1,然后进入ESTABLISHED状态。服务端收到最后一个ack后验证,然后进入ESTABLISHED。表示双方的连接建立完成,可以进行数据传输。

  • 四次挥手断开链接

  • 终止位(FIN):用来释放连接。FIN=1表明此报文段的发送方的数据已发送完毕,并要求释放传输连接。

  • 第一步:客户机打算关闭连接,就向其TCP发送一个连接释放报文段,并停止再发送数据,主动关闭TCP连接,该报文段的FIN标志位被置为1,seq = u,它等于前面已传送过的数据的最后一个自己的序号加1(FIN报文段即使不携带数据,也要消耗一个序号)。TCP是全双工的,即可以想象成是一条TCP连接上有两条数据通路。当发送FIN报文时,发送FIN报文的一段就不能再发送数据,也就是关闭了其中一条数据通路,但对方还可以发送数据。

  • 第二步:服务器收到连接释放报文段后即发出确认,确认号是ack = u+1,而这个报文段自己的序号是v,等于它们前面已传送过的数据的最后一个字节的序号加1。此时,从客户机到服务器这个方向的连接就释放了,TCP连接处于半关闭状态。但服务器若发送数据,客户机仍要接收,即从服务器到客户机这个方向的连接并未关闭。

  • 第三步:若服务器已经没有要向客户机发送的数据,就通知TCP释放连接,此时其发出FIN=1的连接释放报文段。

  • 第四步:客户机收到连接释放报文段后,必须发出确认。在确认报文段中,ACK字段被置为1,确认号ack = w+1,序号seq = u+1。此时TCP连接还没有释放掉,必须经过时间等待计时器设置的时间2MSL后,A才进入到连接关闭状态。


    day29四次挥手解除链接.png
  • 连接状态:

  • FIN_WAIT_1 : 在ESTABLISHED(连接)状态下,主动断开连接会向对端发送FIN=1,然后进入FIN_WAIT_1状态。

  • CLOSED_WAIT : 被动断开连接的一端收到FIN之后,会回应ack,然后进入CLOSED_WAIT状态,在CLOSED_WAIT状态下,连接只能发送数据不能接收数据。

  • FIN_WAIT_2 : 主动断开连接的一端收到FIN的ack回应后会进入FIN_WAIT_2状态。此时无法再发送数据但是可以接受数据。

  • LAST_ACK : 被动断开连接的一端在缓冲区数据发送完成后会发送FIN = 1然后进入LAST_ACK状态。如果程序健壮性较差,在socket收到文件结束符之后没有关闭socket,此处不会发出FIN,导致连接停留在CLOSED_WAIT&FIN_WAIT_2状态。

  • TIME_WAIT : 主动断开连接的一端在收到对端的FIN后回应ACK然后进入TIME_WAIT。此状态下连接已断开,但为了避免最后一个ACK在网络中迷路,而导致的状态紊乱,端口会被保留2*MSL的时长。

  • CLOSED : 在TIME_WAIT状态停留时间达到2*MSL之后进入CLOSED状态,表示无任何连接。

  • UDP协议

  • 不可靠协议传输UDP协议

  • UDP无连接,时间上不存在建立连接需要的时延。空间上,TCP需要在端系统中维护连接状态,需要一定的开销。此连接装入包括接收和发送缓存,拥塞控制参数和序号与确认号的参数。UCP不维护连接状态,也不跟踪这些参数,开销小。空间和时间上都具有优势。

  • UDP没有拥塞控制,应用层能够更好的控制要发送的数据和发送时间,网络中的拥塞控制也不会影响主机的发送速率。某些实时应用要求以稳定的速度发送,能容 忍一些数据的丢失,但是不能允许有较大的时延(比如实时视频,直播等)

  • UDP提供尽最大努力的交付,不保证可靠交付。所有维护传输可靠性的工作需要用户在应用层来完成。没有TCP的确认机制、重传机制。如果因为网络原因没有传送到对端,UDP也不会给应用层返回错误信息

  • UDP是面向报文的,对应用层交下来的报文,添加首部后直接乡下交付为IP层,既不合并,也不拆分,保留这些报文的边界。对IP层交上来UDP用户数据报,在去除首部后就原封不动地交付给上层应用进程,报文不可分割,是UDP数据报处理的最小单位。
    正是因为这样,UDP显得不够灵活,不能控制读写数据的次数和数量。比如我们要发送100个字节的报文,我们调用一次sendto函数就会发送100字节,对端也需要用recvfrom函数一次性接收100字节,不能使用循环每次获取10个字节,获取十次这样的做法。

  • UDP常用一次性传输比较少量数据的网络应用,如DNS,SNMP等,因为对于这些应用,若是采用TCP,为连接的创建,维护和拆除带来不小的开销。UDP也常用于多媒体应用(如IP电话,实时视频会议,流媒体等)数据的可靠传输对他们而言并不重要,TCP的拥塞控制会使他们有较大的延迟,也是不可容忍的

  • 上网的整个流程

  • 本机获取

  • 连接特定的 DNS 后缀:

  • 描述: Intel(R) Ethernet Connection I219-LM

  • 物理地址: ‎50-7B-9D-B4-77-72

  • 已启用 DHCP: 是

  • IPv4 地址: 192.168.11.207

  • IPv4 子网掩码: 255.255.255.0

  • 获得租约的时间: 2020年8月12日, 星期三 8:23:57

  • 租约过期的时间: 2020年8月13日, 星期四 8:23:54

  • IPv4 默认网关: 192.168.11.199

  • IPv4 DHCP 服务器: 192.168.11.199

  • IPv4 DNS 服务器: 192.168.11.199

  • IPv4 WINS 服务器:

  • 已启用 NetBIOS over Tcpip: 是

  • 连接-本地 IPv6 地址: fe80::10d8:497a:f524:822b%24

  • IPv6 默认网关:

  • IPv6 DNS 服务器:

  • 打开浏览器,想要访问google,在地址栏输入了网址:<u style="text-decoration: none; border-bottom: 1px dashed grey;">www.google.com</u>

  • dns协议(基于udp协议)

  • DNS域名解析过程 day30域名解析基本过程.png
  • 13台根dns:

  • A.root-servers.net198.41.0.4美国

  • B.root-servers.net192.228.79.201美国(另支持IPv6)

  • C.root-servers.net192.33.4.12法国

  • D.root-servers.net128.8.10.90美国

  • E.root-servers.net192.203.230.10美国

  • F.root-servers.net192.5.5.241美国(另支持IPv6)

  • G.root-servers.net192.112.36.4美国

  • H.root-servers.net128.63.2.53美国(另支持IPv6)

  • I.root-servers.net192.36.148.17瑞典

  • J.root-servers.net192.58.128.30美国

  • K.root-servers.net193.0.14.129英国(另支持IPv6)

  • L.root-servers.net198.32.64.12美国

  • M.root-servers.net202.12.27.33日本(另支持IPv6)

  • 域名定义:<u style="text-decoration: none; border-bottom: 1px dashed grey;">http://jingyan.baidu.com/article/1974b289a649daf4b1f774cb.html</u>

  • 顶级域名:<u style="text-decoration: none; border-bottom: 1px dashed grey;">以.com</u>,.net,.org,.cn等等属于国际顶级域名,根据目前的国际互联网体系,国际顶级域名分为两类:类别顶级域名(gTLD)和地理顶级域名(ccTLD)两种.

  • 类别顶级域名是以'COM','NET','BIZ','INFO'等结尾的域名,均由国外公司负责管理.地理顶级域名是以国家或地区代码为结尾的域名,如"CN"代表中国,"UK"代表英国。地理顶级域名一般由各个国家或地区负责管理。

  • 二级域名:二级域名是以顶级域名为基础的地理域名,比喻中国的二级域有,.com.cn,.net.cn,.org.cn,.http://gd.cn等.子域名是其父域名的子域名,比喻父域名是abc.com,子域名就是http://www.abc.com或者*.abc.com.

  • 一般来说,二级域名是域名的一条记录,比如http://alidiedie.com是一个域名,http://www.alidiedie.com是其中比较常用的记录,一般默认是用这个,但是类似*.http://alidiedie.com的域名全部称作是http://alidiedie.com的二级

  • HTTP部分的内容,类似于下面这样:

  • GET / HTTP/1.1

  • Host: http://www.google.com

  • Connection: keep-alive

  • User-Agent: Mozilla/5.0 (Windows NT 6.1) ……

  • Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8

  • Accept-Encoding: gzip,deflate,sdch

  • Accept-Language: zh-CN,zh;q=0.8

  • Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3

  • Cookie: … …

  • 我们假定这个部分的长度为4960字节,它会被嵌在TCP数据包之中

  • TCP协议

  • TCP数据包需要设置端口,接收方(Google)的HTTP端口默认是80,发送方(本机)的端口是一个随机生成的1024-65535之间的整数,假定为51775。

  • TCP数据包的标头长度为20字节,加上嵌入HTTP的数据包,总长度变为4980字节。

  • IP协议

  • 然后,TCP数据包再嵌入IP数据包。IP数据包需要设置双方的IP地址,这是已知的,发送方是192.168.1.100(本机),接收方是172.194.72.105(Google)。

  • IP数据包的标头长度为20字节,加上嵌入的TCP数据包,总长度变为5000字节。

  • 以太网协议

  • 最后,IP数据包嵌入以太网数据包。以太网数据包需要设置双方的MAC地址,发送方为本机的网卡MAC地址,接收方为网关192.168.1.1的MAC地址(通过ARP协议得到)。

  • 以太网数据包的数据部分,最大长度为1500字节,而现在的IP数据包长度为5000字节。因此,IP数据包必须分割成四个包。因为每个包都有自己的IP标头(20字节),所以四个包的IP数据包的长度分别为1500、1500、1500、560。

  • 服务端响应

  • 经过多个网关的转发,Google的服务器172.194.72.105,收到了这四个以太网数据包。

  • 根据IP标头的序号,Google将四个包拼起来,取出完整的TCP数据包,然后读出里面的”HTTP请求”,接着做出”HTTP响应”,再用TCP协议发回来。

  • 本机收到HTTP响应以后,就可以将网页显示出来,完成一次网络通信。


    day30数据标头及数据包.jpg

相关文章

  • day30TCP协议详解\上网基本流程

    TCP协议详解 可靠协议TCP协议 三次握手建立双向链接 三次握手的时候并未传送真正的数据,只是在为了后续发送数据...

  • HTTP

    参考:HTTP协议详解HTTP协议处理流程 HTTP练习沙箱:httpbin.org 官方文档:IETF RFC2...

  • 以太坊与椭圆曲线

    参考 TLS/SSL 协议详解 (30) SSL中的RSA、DHE、ECDHE、ECDH流程与区别:https:/...

  • HTTPS协议

    HTTPS协议详解(一):HTTPS基础知识HTTPS协议详解(二):TLS/SSL工作原理HTTPS协议详解(三...

  • http协议

    1、上网流程2、web服务器的工作原理3、DNS工作原理4、HTTP协议 1、上网流程浏览器本身它是一个客户端,当...

  • socket之网络基础

    1、OSI七层协议 2、五层协议 3,协议详解 4,tcp详解

  • TCP三次握手和四次挥手

    有关TCP协议详解,请看博客:【TCP协议】(1)---TCP协议详解[https://www.cnblogs.c...

  • TCP协议

    TCP/IP协议分层详解TCP/IP协议详解通俗易懂网络协议(TCP/IP概述)什么是TCP/IP协议?

  • iOS学习笔记之HTTP协议,iOS缓存和CoreData

    一.HTTP协议: 参考资料: HTTP协议详解:HTTP协议详解 超文本传送协议(百度百科):超文本传送协议百度...

  • 认证

    基本权限认证分为OAuth认证,摘要认证和基本认证,证书认证,表单认证 OAuth 认证流程详解: 摘抄自:htt...

网友评论

      本文标题:day30TCP协议详解\上网基本流程

      本文链接:https://www.haomeiwen.com/subject/arcmdktx.html