【HCIA笔记(TCP协议)】

OSI参考模型

应用层-----用来接收用户数据,人机交互接口 表示层-----将逻辑语言转换为机器语言 会话层-----针对传输的每一种数据建立一条独立的通道。数据的整合 控制层面---上三层----不会对数据本身进行修改 数据层面---下四层----对数据进行加工 传输层-----区分流量信息,定义数据传输方式。TCP协议、UDP协议 网络层-----通过IP地址进行逻辑寻址,IP协议

数据链路层-----逻辑链路控制层(LLC);介质访问控制层(MAC) 物理层----定义物理特性

OSI七层模型:

7、应用层:  面向用户,产生数据

6、表示层:  对数据进行特殊处理(加密,压缩等)

5、会话层:  建立,维护,管理会话连接

PDU (协议数据单元)

4、传输层:  建立,维护,管理端到端的连接

段头+Data

3、网络层:  IP寻址和路由选择

包头+段头+Data

2、数据链路层:  维护网络层和物理层之间通信的

帧头+包头+段头+Data+帧尾

1、物理层:比特流传输

TCP/IP:
应用层
传输层
网络层
网络接口层
数据帧的帧格式:Ethernet_II,IEEE802.3
帧头:不同的数据帧有不同的参数
Data:IP头+段头+Data
帧尾:FCS
Ethernet_II帧格式: D.MAC+S.MAC+Type+Data+FCS   
    Type/Length >= 1536(0x0600)  Ethernet_II
        Type:类型字段,用来区分上层协议类型
                0X0800 IP
                0X0806 ARP
        FCS:帧尾校验,用来检验数据帧的完整性
IEEE802.3帧格式: D.MAC+S.MAC+Length+LLC+SNAP+Data+FCS  
    Type/Length <= 1500(0x05DC)  IEEE802.3
    Length:长度字段,表示数据帧的长度(不包含帧尾)
    LLC:逻辑链路控制
            D.SAP目的的服务访问点
            S.SAP源服务访问点
            Control控制字段
    SNAP:子网访问协议
            机构代码
            Type:类型字段,用来区分上层协议类型
    FCS:帧尾校验,用来检验数据帧的完整性
怎么区分?
1.根据帧头的参数区分
    如果帧头参数为:
        D.MAC+S.MAC+Type,表示为Ethernet_II帧
        D.MAC+S.MAC+Length+LLC+SNAP,表示为IEEE802.3帧
2.根据第三个字段的长度区分
        Type/Length >= 1536(0x0600)  Ethernet_II
        Type/Length <= 1500(0x05DC)  IEEE802.3
数据封装:
1.应用层,表示层,会话层:由上三层形成一个数据PDU, 交给传输层
2.传输层:传输层接收到一个数据之后,加上传输层的头部,形成一个数据段,交给网络层
3.网络层:接收到一个数据段之后,加上网络层的头部,形成一个数据包交给数据链路层
4.数据链路层:接收到一个数据包,加上帧头帧尾,形成一个数据帧交给物理层
5.物理层:接收到数据帧,将数据帧转换成比特流发送出去
MAC地址: 48bit,通常由十六进制数表示,每两个十六进制数用“-”隔开,例如:54-89-98-FD-A6
分类:
单播MAC:第八位比特位为0表示这是一个单播MAC地址
组播MAC:第八位比特位为1表示这是一个组播MAC地址
广播MAC:全为F表示这是一个广播MAC地址
数据帧的发送方式:
单播:一对一,当数据帧的目的MAC地址为单播MAC地址时,只有是自身的MAC地址才会接收
组播:一对多,当数据帧的目的MAC地址为组播MAC地址时,只有是自身所在组的MAC地址才会接收
广播:一对所有,设备在接收到目的MAC地址为广播MAC地址的数据帧时,都会接收
数据解封装:
1.物理层:接收到一段比特流,转换成数据帧交给数据链路层
2.数据链路层:接收到数据帧,参看帧尾校验,如果校验通过,继续查看帧头参数,查看目的MAC,如果是自身的单播MAC/所在组的组播MAC/广播MAC,查看Type,拆掉帧头帧尾交给对应上层协议处理
3.网络层:查看目的的IP地址是不是自己,是自己的接收,拆掉网络层头部交给传输层
4.传输层:查看传输层的头部交给对应上层应用处理
 

报文的封装与解封装

物 理 层

代 表 设 备:中 继 器 、 集 线 器

传 输 介 质

同轴 电 缆双绞线 屏蔽双绞线(STP)、非屏蔽双绞线(UTP) 光纤

5类、超5类、6类、超6类、7类

100Mbps、1000Mbps、10Gbps

线序:568A、568B 568B:橙白、橙、绿白、蓝、蓝白、绿、棕白、棕

568A:1/3对调、2/6对调

绿白、绿、橙白、蓝、蓝白、橙、棕白、棕

单模(波长1310nm)传输距离远,但是传输效率较低。多模(波长850nm)传输距离短, 但是传输效率高。

双工模式

单工 半双工 全双工

同一物理链路连接的设备所具备的双工模式必须相同。市面上大部分设备都是全双工模式。

数据链路层

二层地址---MAC地址---48bit---写法减号分十六进制 前24位:表示厂商ID;由IEEE组织进行全球分配 后24位:表示产品ID

数据帧

由网络层产生的数据包,被下发给数据链路层后,分别会在数据包的头部和尾部添加上封装信息。封 装后的数据被称为数据帧。 以太网Ⅱ

AA-AA-AA-AA-AA-AA

FCS---帧校验序列 使用的是模二运算,可以参考CRC标准文档

IEEE802.3标准

数据帧发送方式

单播 组播 广播

网络层

IPv4地址的有类分址。

A\B\C三类被称为单播地址,如果源和目的均为单播地址的数据包,则被称为是单播报文。

特殊地址

前4位数字特征来分类

0xxxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx 10xxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx 110xxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx   192.0.0.0-223.255.255.255

私有地址

IP分片

MTU---最大传输单元----在以太网当中为1500字节----设备双方通过协商得出MTU数值后,则在链路中 传输的报文的最大字节为MTU数值。

0.0.0.0---->代表没有IP或者代表所有设备

127.X.X.X--->本地测试地址---127.0.0.1(代表自身) 网段地址--->主机位全0的地址---网络地址

192.168.1.0/24

广播地址--->255.255.255.255 定向广播地址--->192.168.1.255--->主机位全1 A:10.0.0.0/8--10.0.0.0-10.255.255.255 B:172.16.0.0---172.31.255.255---共16个B类地址段

C:192.168.0.0-192.168.255.255---共256个C类地址段 版本--恒定为4

生存时间---Time to Live---TTL数值-->这个数据包可以在网络中存活的时间

每经过一台路由器,TTL数值减1,当某台路由器在收到IP报文后,发现TTL数值为0,则直接丢弃该报 文。

协议字段---指代上层协议(可以是传输层、也可以是应用层)

TCP---6 UDP---17

标记字段---用于数据包的排序以及判断是否完整接收数据信息。 标志位---3bit,恒定0;DF位--该标记位为1,则代表该报文没有被分片。MF位--为0则代表是最后一个报 文,为1则代表后续还有其他报文。 片偏移--用来记录每一个分片的原始位置

传输层

端口号---用来区分计算机上不同应用程序的;标识不同的进程。

TCP协议-----传输控制协议

一种面向连接的可靠传输协议。

TCP协议建立的连接是双向连接。

面向连接:在数据传输之前,收发双方需要预先建立一条逻辑通路。 无面向连接。

TCP分段:因为IP分片后,TCP协议无法保证数据的可靠性传输;故而使用TCP协议进行封装的文件不允 许进行IP分片,而又因为MTU存在,需要将大文件分为小文件,该操作由TCP协议完成。

MSS---最大传输段===MTU-IP头部-TCP头部

在TCP协议中,每一个报文都需要有序列号信息。

可靠性

确认机制----每收到一个TCP数据段,都需要发送一次确认报文。 重传机制----超时重传,当一个数据段中的某个报文丢失,发送端会主动重新发送一次该报文。 排序机制----传输数据段时,被分为多个报文,从不同路径传输,最终达到目的地的顺序会被打乱, 需要根据序列号字段进行重新排序。

端口号总共是2字节大小。

0-65535--->1-65535

静态端口(著名端口)---1-1023----网络中常用协议的固定端口 动态端口----1024-65535--->某些协议或程序自行生成的端口 序列号 确认序列号

6位标志位

SYN---同步位---是在TCP三次握手建立通道时的标记

ACK---确认位---当该标记位置为1时,确认序列号有意义

FIN---代表释放TCP连接

流控机制(滑动窗口机制):可以通过调节窗口大小(Windows)来对流量进行控制

1.序号Sequence Number (32bit) :传输⽅向上字节流的字节编号。初始时序号会被设置⼀个随机的初始(ISN),之后每次发送数据时,序号值 = ISN + 数据在整个字节流中的偏移。

需要注意,这里的序号指的是字节流中某一个字节的序号,而不是报文段的序号。

2.确认应答号Acknowledgement Number (32bit):字段长 32 位,指下一次应该收到的数据的序列号。发送端收到这个确认应答以后,可以认为在这个序号以前的数据已经被正常接收了。

Seq(Sequence Number 的简写)为每一次 TCP 段中数据部分最后一个字节的序号,假设为 1000(数据长 100 个字节),此时接收端收到之后,会进行确认应答,应答时A(Acknowledgement Number 的简写)则为 1001,即下一次需要接收的数据的起始序号。

3.控制位Control Flag (8bit):

(1)ACK(Acknowledgement Flag):为1时,确认应答的字段变为有效。TCP规定除了最初建立连接时的SYN包之外该位必须置位1.

(2)SYN(Synchronize Flay):用于建立连接,为1表示希望建立连接,并在其序列号的字段进行序列号初始值设定。

(3)FIN(Fin Flag):为 1 时表示今后不会再有数据发送,希望断开连接。当通信结束希望断开连接时,通信双方的主机之间就可以相关交换 FIN 位置为 1 的 TCP 段。每个主机又对对方的 FIN 包进行确认应答以后就可以断开连接。不过,主机收到对方的FIN包以后不必马上回复FIN包,而是可以等到缓冲区中所有数据都因为发送成功而被自动删除之后再发。

TCP报文段

确认序列号:1、该序列号表示接收方期望收到发送方发送下一个字节的序号。

                      2、代表接受方已收到该确认序列号之前的所有字节。

窗口值:指发送方可以不需要接受确认报文,就可以连续发送的数据最大量。

选项文字:MSS、时间戳、选择确认机制、窗口因子。

IP分片

MTU - 最大传输单位 ---在以太网当中为1500字节----设备双方通过协商得出MTU数值后,则在链路中传输的报文的最大字节为MTU数值。
TCP分段 :因为 IP 分片后, TCP 协议无法保证数据的可靠性传输;故而使用 TCP 协议进行封装的文件不允
许进行 IP 分片,而又因为 MTU 存在,需要将大文件分为小文件,该操作由 TCP 协议完成。
MSS--- 最大传输段 ===MTU-IP 头部 -TCP 头部
在 TCP 协议中,每一个报文都需要有序列号信息 。
TCP的可靠性机制
确认机制 ---- 每收到一个 TCP 数据段,都需要发送一次确认报文。
重传机制 ---- 超时重传 ,当一个数据段中的某个报文丢失,发送端会主动重新发送一次该报文。
排序机制 ---- 传输数据段时,被分为多个报文,从不同路径传输,最终达到目的地的顺序会被打乱,需要根据序列号字段进行重新排序。
控制机制(滑动窗口机制):可以通过调节窗口大小(Windows)来对流量进行控制。
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                        
原文链接:https://blog.csdn.net/2301_80840390/article/details/140505650

第一次挥手丢失、第二次挥手丢失、第三次挥手丢失、第四次挥手丢失分别会发生什么?

    第一次挥手丢失,服务端根本不知道,和服务端没有任何关系,客户端发完进入close_wait_1状态,等服务端的fin_ack报文,一直没收到,达到超时时间,就会超时重传(每次重传,等待时间都是前一次的两倍),重传次数达到tcp_orphan_retries,就会直接进入 close 状态。

    前置知识: close 和 shutdown 是什么? socket所使用的函数,close 函数会关闭连接,释放所有连接的资源,shutdown不会释放掉套接字和所有的资源。

    第二次握手丢失,也就是服务端获取了客户端的FIN报文,进入CLOSE_WAIT状态,因为ACK报文不会重传(本质上是因为它不需要回复),客户端到重传时间就会重传FIN报文,知道收到客户端的ACK报文或者达到最大的重传次数(自己关闭)。如果采用 close 函数关闭,FIN_WAIT1 状态下,接收到 ACK后,不会维护太久时间,直接由 tcp_fin_timeout 来倒计时,这个时间之内收到,进入close 状态,没收到,也就进入close状态了;如果采用shutdown关闭,还是可以接收数据(tcp_fin_timeout无法控制shutdown关闭的连接)

    第三次握手丢失,服务端发送的ACK被客户端正常接收,进入到 CLOSE_WAIT 状态(这里等待应用进程调用的是close函数关闭连接),进入到LAST_ACK状态,发出FIN报文,这个报文丢失了,如果收不到来自客户端的ACK,就会一直超时重传,知道超过超时重传次数(tcp_orphan_retries);客户端如果采用close关闭的(达到60s就会自动关闭),如果采用shutdown关闭的,可能就有HTTP keep-alive-timeout关闭 或者 TCP Keepalive探测到断开连接了。

    第四次握手丢失,就是服务端发送的ACK丢失了,服务端维持2MSL,才会进入Close状态,如果在这个过程中收到 服务端超时重传的 FIN(肯定是小于2MSL的)超过了,它自动断开连接。
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                        
原文链接:https://blog.csdn.net/2401_84933917/article/details/140511459

                         

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值