TCP/IP

本文深入探讨了TCP/IP协议族,涵盖了从应用层到链路层的各层功能,包括TCP和UDP的区别、IP地址、端口号、超时重传机制、IPv4与IPv6、TCP的三次握手与四次挥手过程,以及TIME_WAIT状态的含义。此外,还解释了半连接状态、半连接队列、丢包处理和网络设备的角色。
摘要由CSDN通过智能技术生成

目录

应用层:

传输层:

网络层:

链路层(网络接口层):

一些基础概念:

超时重传:

IPv4:

IPv6:

端口号:

协议详解:

TCP:

TCP协议的三次握手:

为什么要进行三次握手:

为什么需要三次握手,两次不行吗,为什么不进行四次:

连接之前客户端和服务端都处于什么状态:

TCP模块接受连接的过程:

什么是半连接状态:

什么是半连接队列:

丢包会导致什么怎么解决丢包的情况:

如果连接工程某个数据包丢失,会导致什么,客户端和服务端会怎么处理:

SYN攻击是什么:

四次挥手:

过程:

TIME_WAIT:

UDP:

IP:

ICMP:

ARP:

一些网络设备:


TCP/IP

应用层:

作用:发送数据报文
协议:http,DNS,
传给传输的数据名称:数据报文

传输层:

作用:
发送端:
对(http)报文进行分割,并在每一段报文上加上TCP首部(序号和本端端口号和目的端端口号)
接受端:接收对端的报文段,按报文段的序号重组报文段
协议:TCP,UDP,SCTP
传给网络层的数据名称:TCP报文段

网络层:

作用:

发送端:选择(最佳)传输路线,在TCP报文段上加上IP首部(把MAC地址加入报文段),

接收端:对接收到的数据报进行重组。
协议:IP,ICMP,IGMP
传给链路层的数据名称:IP数据包(报)

链路层(网络接口层):

作用:在IP数据包上加上以太网首部,
链路层属于网卡,已经位于硬件部分。
链路层使用物理地址(MAC)寻址一台机器,所以需要将网络层传输过来的IP地址转换MAC地址。
协议:ARP,RARP
传给对端的数据名称:帧
有管理帧,数据帧,控制
网络中的多是数据帧

最重要:网络层

一些基础概念:

数据包是网络数据传输的最小数据单位
IP地址和MAC地址:
IP地址可以变换,MAC不可以变换
MTU(最大传输单元):链路层一次能够传递的最大数据字节数。
路径MTU:包含很多链路的网络路径上最小的MTU
封装:将来自于上一层的数据报文加上本层头部信息的做法

eg:传输层经过封装后的数据称为TCP报文。

路由:

路由器从一个接口上接收到数据包,根据数据包的目的地址进行定向并转发到另一个接口的的过程。
分片(IP分片):当需要传输的IP数据字节数大于链路层的MTU时,IP数据将会被分成多个小分片,
分片仅用于单播

分片可能发生在发送端,也可能发生在中专路由上,但是只有在接收端才会被重组。

被分片后的数据包如何知道同属于一个数据包:

IPv头部中有16位标识位,当数据包被分片时,IPv4头部会被复制到每一个被分片的数据包中,这个标识位就用来标识同属于一个数据包。
用序列号标识多个分片同属于一组数据帧
用分片号给这些分片排序以便重新组合
局域网(LAN)
网络设备是怎么找到下一站传输目的地时:
根据MAC地址

分组:就是数据块
多路:就是复用
差错控制:
流量控制:
控制发送方发送帧的速度的方式
单播:
目的地是一台主机
广播:
目的地是一个网络中的所有主机
组播:
目的地是一个范围内中的一组主机
这个范围小到个人,打到全球

广播和多播为什么不用TCP协议:

TCP协议是一对一的协议,而广播和多播的目的地址是多个主机。
网桥:用来连接不同网络的网络设备
交换机也是一种网桥

超时重传:

为什么需要超时重传:

超时重传实现的背景原理:

怎么实现:

IPv4:

32位(4字节),
以点分隔为四组十进制数,每个组0~255的非负整数
对点转换为二进制,二进制表示时,不需要点,以空格分隔


IPv6:

 128位(16字节)
以:分隔的十六进制数
IPv6简化规则:
1,全为0的组可以被压缩为::一次,只能压缩一次,之后的全为0的组只能简写为一个0而不能压缩
2、每个组位于前面的0可以省略:0056—>56
IP数据报=IP头部+
IPv4头部:
20个字节,


IPv6头部:
40个字节,

端口号:

0~65535的16位(2字节)非负整数

网络层地址(软件地址)
:用户自己配置生成
链路层地址(硬件地址)
:由制造商定义

协议详解:

TCP/IP协议族

Transmission Control Protocol / Internet Protocol


可靠,有连接,端对端

TCP:

什么是TCP协议(本质):

可靠,有连接,端对端


UDP:

不可靠,无连接,


IP:

因特网协议
尽力而为,无连接,不保证数据成功到达

什么是IP协议(本质):

IP本身并不是一个协议,而是IPv4和IPv6协议的统称

那么IPv4和IPv6协议又是如何规定的

(TTL是IP数据包在网络中的存活时间。)

TTL(time to live):表示一个IP数据包在它可能被丢弃之前可以经历的设备的数量,

TTL是由数据包的发送者设置的, 在前往目的地的过程中, 每经过一台主机或设备, 这个值就要减少一点. 如果在数据包到达目的地前, TTL值被减到了0,那么这个包将作为一个ICMP错误的数据包被丢弃.TTL可以防止无法到达目的地的数据包在网络中无限制地传递或者循环传递, 形成"不死包".


ICMP:

ICMP报文分为两类:
差错报文——>回应网络错误
查询报文——>查询网络信息
ICMP报文格式和作用:

Internet控制消息协议,


ARP:

IP地址和MAC地址相互查询的协议


TCP协议的三次握手:

为什么要进行三次握手:

就是为了确认双方的接收能力和发送能力是否正常、指定自己的初始化序列号为后面的可靠性传送做准备。实质上其实就是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号,交换TCP窗口大小信息。


为什么需要三次握手,两次不行吗,为什么不进行四次:

第一步:客户端发送数据包,服务端接受到数据包,服务端就可以可以确认客户端发送能力正常。
第二步:服务端给客户端发送数据包,客户端接收到数据包,客户端就可以确定服务端的接受和发送功能都正常。
第三步:客户端再发送数据包给服务端以确认刚刚收到的数据,服务端如果收到数据包,就确认客户端接收能力正常。
三次刚好都让双份都可以确认通信双方的接收到和发送能力都正常。两次不可以,四次没必要。

连接之前客户端和服务端都处于什么状态:

刚开始客户端处于 Closed 的状态,服务端处于 Listen 状态。

TCP模块接受连接的过程:

复制-->写入--->分配--->确认

如果存在等待连接的套接字,则为这个套接字复制一个新的副本,并将发送方IP地址、端口号、序号初始值、窗口大小等必要的参数写入这个套接字中,同时分配用于发送缓冲区和接收缓冲区的内存空间。然后生成代表接收确认的ACK号,用于从服务器向客户端发送数据的序号初始值,表示接收缓冲区剩余容量的窗口大小,并用这些信息生成TCP头部,委托IP模块发送给客户端。
序列号是如何确定的:


什么是半连接状态:

完成第二次连接就是半连接状态


什么是半连接队列:

服务器在完成第二步连接之后处于同步接收状态(SYN_RCVD),这个状态被放在一个队列里,这个队列就是半连接队列
同样的在完成三次连接之后,连接状态被放入全连接队列。
如果队列已经满了,就可能出现丢包在情况。


丢包会导致什么
怎么解决丢包的情况:


如果连接工程某个数据包丢失,会导致什么,客户端和服务端会怎么处理:

SYN攻击是什么:

四次挥手:

过程:

主动关闭端应用程序调用close关闭套接字,操作系统调用协议栈的TCP模块生成控制位FIN(表示断开连接)为1的TCP头部报文,这个TCP报文经过网络层,链路层,形参网络包,经过网络设备发送给被动关闭端,被动关闭端收到这个包之后,本端的协议栈的TCP模块再读取整个网络包中的TCP头部数据,先对这个包返回一个确认,读取整个包是要关闭连接的,被动关闭端就会调用close关闭套接字,生成FIN为1的TCP头部,再形成网络包发送给主动关闭端,主动关闭端收到这个网络包返回一个确认,被动关闭端收到这个确认,挥手完成。

为什么会是四次挥手:

因为被动关闭端在收到对端的结束报文的时候,TCP模块先返回确认,然后再调用close执行套接字的关闭,生成本端的结束报文再发送结束报文(LAST_WAIT)给主动关闭端,收到来自主动关闭端的确认才关闭(CLOSED)

更多详细

TIME_WAIT:

直接看原文-------链接

发生的时刻:

当四路挥手发生到第三步时,即客户端收到服务端的结束报文时,客户端并不是立刻进入CLOSED的关闭状态,而是转移到TIME_WAIT状态,在这个状态,客户端要等待2MSL的时间,2MSL之后就进入CLOSED状态。客户端也就完全关闭。

发生TIME_WAIT的原因:

当接收端接收到发送端要求断开连接的请求时,接收端为了可靠地完成连接的终止,就需要自己的状态进入2MSL的TIME_WAIT状态。

MSL:是TCP报文段在网络中的最大生存时间。

为什么要持续2MSL:

发送一个TCP报文段到对端最大的时间就是MSL,而发送一个TCP报文并等待确认TCP报文的最大时间是2MSL,如果在2MSL内没有收到确认报文,就重发

TIME_WAIT发生在哪:

TIME_WAIT发生在主动关闭端。

坏处:一个连接在TIME_WAIT期间,我们无法利用该连接的端口建立一个新的连接。

好处:

1,可靠的终止TCP连接:

发送一个TCP报文段到对端最大的时间就是MSL,而发送一个TCP报文并等待确认TCP报文的最大时间是2MSL,如果在2MSL内没有收到确认报文,就重发

所以,TIME_WAIT的时间段内刚好可以保证TCP报文丢失时,可以重发,以保证连接的正常终止。

2,保证本链接迟来的TCP报文段有足够的时间被识别并丢弃(不至于,如果立即创建和本链接相同的连接收到本连接的数据)

解决办法:

可以利用setsockopt函数设置套接字的SO_REUSEADDR选项来强制使用处于TIME_WAIT状态的连接的端口号。

一些网络设备:

网卡(网络适配器):
是电脑与局域网相互连接的设备。无论是普通电脑还是高端服务器,只要连接到局域网,就都需要安装一块网卡。如果有必要,一台电脑也可以同时安装多块网卡。
一块网卡包括OSI 模型的两个层,物理层和数据链路层:

     1》物理层定义了数据传送与接收所需要的电与光信号、线路状态、时钟基准、数据编码和电路等,并向数据链路层设备提供标准接口。

     2》数据链路层则提供寻址机构、数据帧的构建、数据差错检查、传送控制、向网络层提供标准的数据接口等功能。
网卡=物理层+链路层
  网卡的功能主要有两个:

       一是将电脑的数据在链路层封装为帧,并通过网线(对无线网络来说就是电磁波)将数据发送到网络上去;

       二是接收网络上其它设备传过来的帧,并将帧重新组合成数据,发送到所在的电脑中。

一个数据包在网络中生成,传输,解析的这个过程:

协议族和地址族定义在socket. h文件中,两个协议成员具有相同的值,可以混用。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值