01 网络模型与协议【网络编程】

7层网络模型与TCP/UDP协议

计算机间的网络

现在计算机间的请求响应、分工协作都离不开网络

网络硬件:电缆、光纤、交换机、路由器、卫星等

信号数据载体:光、电、波

为使不同国家不同的通信设备能够互相通信,以便在更大的范围内建立计算机网络,有必要建立一个国际范围的网络体系结构标准

OSI网络七层模型

应用层表示层会话层--->传输层--->网络层--->数据链路层--->物理层

在传输层往下是开发人员不需要关心的

一层层加数据,一层层解开数据--->类比快递,商家一层一层加包装,为了保护快递(数据)

第7层 应用层 各种应用程序协议,如HTTP、FTP、SMTP、POP3

第6层 表示层 信息的语法语义以及它们的关联,如加密解密、转换翻译、压缩解压缩

第5层 会话层 不同机器上的用户之间建立及管理会话

第4层 传输层 接受上一层的数据,在必要的时候把数据进行分割(拆包),并将这些数据交给网络层,且保证这些数据段有效到底对端--->发送方在传输层会把数据加上TCP(或者UDP)的头部信息,而接收方会在这一层拆解TCP(或者UDP)头部信息

第3层 网络层 控制子网的运行,如逻辑编址、分组传输、路由选择--->发送方在这一层会把传输层加上TCP头部的数据再加上IP头部,接收方则是拆下IP头部

第2层 数据链路层 物理寻址,同时将原始比特流转变为逻辑传输线路--->这一层是LLC头部、MAC头部的加装与拆解

第1层 物理层 机械、电子、定时接口通信信道上的原始比特流传输

IP协议及其报文结构

IP位于网络层,对上可载送传输层各种协议的信息,对下可将IP信息包放到链路层,是整个TCP/IP协议族的核心(TCP和UDP都是建立在IP协议之上的)。它只负责数据包的发送,不保证数据包能被可靠、有序、完整的交付。目前IP协议有IPV4、IPV6两个版本。

拆包?--->包送达的顺序可能和发的顺序不一样--->IP协议无法保证包送到的顺序

IP报文头部由若干字段组成,每个字段占用特定数量的位(bit)。下面是IPv4报文头部的基本结构及每个字段所占的位数:

1. **版本(Version)** - 4位:指定了IP协议的版本,IPv4是4,IPv6是6。
2. **头部长度(Header Length)** - 4位:指示IP头部的长度,单位为32位字(4字节)。这个字段的值乘以4就是头部的字节长度。
3. **服务类型(Type of Service)** - 8位:提供服务质量和路由选择的信息。
4. **总长度(Total Length)** - 16位:指示整个IP报文的长度,包括头部和数据,单位为字节。
5. **标识(Identification)** - 16位:用于唯一标识发送者发送的每一个报文。
6. **标志(Flags)** - 3位:控制和标识分片的行为。
7. **片偏移(Fragment Offset)** - 13位:指示分片在原始数据报文中的相对位置。
8. **生存时间(Time to Live, TTL)** - 8位:限制数据报文在网络中的生命周期,通常以跳数计算。
9. **协议(Protocol)** - 8位:指示上层协议,例如TCP(6)、UDP(17)。
10. **头部校验和(Header Checksum)** - 16位:用于检测头部信息的错误。
11. **源IP地址(Source Address)** - 32位:发送者的IP地址。
12. **目的IP地址(Destination Address)** - 32位:接收者的IP地址。
13. **选项(Options)** - 可变长度:提供额外的功能,不常用。长度可变,但总长度必须使得整个头部的长度是32位的整数倍。
14. **填充(Padding)** - 可变长度:确保IP头部长度是32位字的整数倍。

总结起来,IPv4报文头部的固定部分长度是20字节(160位),如果包含选项,则长度可能更长。

TCP协议及其报文结构

TCP协议(传输控制协议,为IP协议补充完整、可靠、有序),是INTERNET一个重要的传输层协议。TCP提供面向连接(有一定的报文数据格式)可靠有序字节流传输服务。应用程序在使用TCP之前,必须先建立TCP连接。

报文内容:从什么端口发给什么端口,报文序号,TCP连接标志位,滑动窗口大小等

TCP的主要功能包括数据的分割、传输、接收,并在这个过程中提供可靠性和流量控制机制。TCP报文段通常被封装在IP数据包中进行传输。

TCP报文段的结构包括一个固定的头部(通常是20字节,如果有选项的话可能更长)和可选的数据部分。以下是TCP报文段头部的各个字段:

1. 源端口(Source Port) - 16位:标识发送方的端口号。
2. 目的端口(Destination Port) - 16位:标识接收方的端口号。
3.序号(Sequence Number) - 32位:发送的数据字节流中的第一个字节的序号。
4. 确认序号(Acknowledgment Number) - 32位:接收方期望收到的下一个序号,同时确认收到的数据。
5. 数据偏移(Data Offset) - 4位:TCP头部的长度,单位为32位字(4字节)。这个字段的值乘以4就是头部的字节长度。
6. 保留(Reserved) - 6位:保留未用。
7. 控制位(Flags) - 6位:包含如下几个控制标志:
   - URG (紧急指针标志)
   - ACK (确认序号有效标志)
   - PSH (推送函数标志)
   - RST (重置连接标志)
   - SYN (同步序号用于建立连接标志)
   - FIN (发送方完成发送任务标志)

--->每个标志位各占1位,初始值为0,表明它们各自对应的控制功能默认是不激活的
8. 窗口(Window)- 16位:用于流量控制,指定了接收窗口的大小。
9. 校验和(Checksum) - 16位:用于检查报文段在传输过程中是否出错。
10. 紧急指针(Urgent Pointer) - 16位:仅在URG标志被设置时有效,指出在报文段中的紧急数据的结束位置。
11. 选项(Options) - 可变长度:用于支持额外的功能,如最大报文段大小(MSS)、窗口扩大因子、时间戳等。长度可变,但总长度必须使得TCP头部长度是32位的整数倍。
12. 填充(Padding) - 可变长度:确保TCP头部长度是32位字的整数倍。

TCP通过这些字段提供了一系列的功能,包括但不限于建立和终止连接的机制(SYN和FIN标志),可靠性保证(通过序列号和确认应答),以及流量控制(窗口字段)。

标志位说明

  • URG:紧急指针
  • ACK:确认序号
  • PSH:有DATA数据传输
  • RST:连接重置
  • SYN:建立连接
  • FIN:关闭连接

TCP协议建立连接的三次握手

为什么要三次握手?

三次握手的最主要的目的就是建立可靠的通信信道,双方确认自己与对方的数据发送与接收是正常的。Server端处于监听状态,双方的数据收发是串行的(一发一个连接?)。

第一次握手,Client向Server发送SYN=1,seq=x(包含客户端的初始序列号(ISNc),用于同步序号,试图与Server建立连接,Client什么都不能确认;Server能确认对方发送正常,自己接收正常。

第二次握手,Server对于Client的第一次握手进行回应,SYN=1,ACK=1,seq=y,ack_seq=x+1(这个报文段包含服务器的初始序列号(ISNs),并对客户端的SYN报文段中的序列号加1(ISNc+1),Client能确认自己和对方,发送、接收正常;Server能确认对方发送正常,自己接收正常。

第三次握手,Client对于第二次的握手向Server进行回应,seq=x+1,ak_seq=y+1(确认号为服务器的初始序列号加1(ISNs+1),ACK=1。Client能确认自己和对方,发送、接收正常;Server能确认自己和对方,发送、接收都正常

三次握手就能确认双方收发功能都正常,缺一不可。

TCP协议数据传输过程

TCP协议负责保障网络数据包的可靠性,使用确认技术(ack,每发过来一份数据我接收到了我都会给你一个ack)来确保目的设备收到了从原设备发来的数据,并且是准确无误的。

为保证数据传输的可靠,TCP协议做了大量的底层工作:数据分割、排序编号、校验和、去重、流量控制、拥塞控制、ARQ协议、超时重传。

TCP关闭连接的四次挥手 

为什么要四次挥手

四次挥手时TCP连接时两端可以同时接收和发送数据,因此,每个端都必须要单独进行关闭。主要目的也是为了可靠的通信。

第一次挥手,FIN_WAIT_1,Client给Server发FIN=1,seq=u,表示没有数据发送了,但是还能接收Server发来的数据。

第二次挥手,Server给Client发ACK=1,seq=v,ack_seq=u+1,告诉Client你的意思我知道了,但是我还能发数据给你,整个连接就处于半关闭了。--->ClOSE_WAIT半关闭,Client处于FIN_WAIT_2等待释放

第三次挥手,Server数据发送完毕,告诉Client我也可以关闭连接了。Server给Client发FIN=1,ACK=1?,seq=w,ack_seq=u+1--->相当于对第一次挥手的正式响应?--->LAST_ACK等待确认

第四次挥手,你的数据我接收完了,都关闭连接吧。Client给Server发ACk=1,seq=u+1,ack_seq=w+1--->CLOSE

中间少一次,就会造成数据传输的不可靠。

--->问题:如果服务端早就发完数据的情况下,都二次挥手和第三次挥手可不可以同时发?不可以,四次挥手是必要的,因为TCP连接是全双工的,即数据可以在两个方向上流动。所以每个方向的关闭都需要一个FIN和一个ACK。

TCP的四次挥手(四步断开连接过程)是用于终止TCP连接的过程。在一个TCP连接的生命周期中,数据传输完成后,连接的两端需要通过一个四步的过程来优雅地关闭连接。这个过程确保了双方都有机会完成数据的发送和确认,从而安全地关闭连接。以下是四次挥手的步骤:

1. FIN(结束)从客户端到服务器

  • 客户端决定数据发送完成,需要关闭连接,于是它发送一个FIN报文段。这个FIN报文段用于告知服务器,客户端已经完成了数据的发送。
  • 报文段的FIN标志位被设置为1,表示这是一个结束连接的请求。

2. ACK(确认)从服务器到客户端

  • 服务器接收到客户端的FIN报文段后,发送一个ACK报文段作为响应。这个ACK报文段表示对刚才接收到的FIN报文段的确认。
  • 服务器的ACK报文段不是立即关闭连接,而是确认了客户端的结束请求。

3. FIN(结束)从服务器到客户端

  • 服务器准备好关闭连接时,发送一个FIN报文段给客户端,用于告知客户端,服务器也准备好了结束连接。
  • 与客户端类似,这个FIN报文段的FIN标志位被设置为1。

4. ACK(确认)从客户端到服务器

  • 客户端接收到服务器的FIN报文段后,发送一个ACK报文段作为响应。这表示客户端确认了服务器的结束请求。
  • 在发送最后一个ACK报文段后,客户端会进入一个称为TIME_WAIT的状态,持续一段时间(通常是2倍的最大段生命周期MSL)以确保服务器接收到了最终的ACK报文段。

关键点

  • 四次挥手是必要的,因为TCP连接是全双工的,即数据可以在两个方向上流动。所以每个方向的关闭都需要一个FIN和一个ACK。
  • TIME_WAIT状态的存在是为了确保在连接完全关闭之前,能够重新传输那些可能丢失的最后一个ACK报文段。
  • 四次挥手过程确保了双方都有机会完成数据的发送和确认,从而安全地关闭连接。

这个过程通过确保双方都能够完全和优雅地关闭连接,体现了TCP协议设计的可靠性和健壮性。

UDP协议及报文结构

UDP用户数据报协议,提供无连接不可靠、数据报 服务

UDP(用户数据报协议,User Datagram Protocol)是一种简单的传输层协议,提供了无连接的通信服务。与TCP相比,UDP不保证数据包的顺序、完整性或可靠性,但它的优势在于低延迟和低开销,特别适用于那些对实时性要求高的应用,如视频会议、在线游戏和语音传输。

UDP协议的特点

  • 无连接:在数据传输前,不需要建立连接,数据包(称为用户数据报)可以立即发送。
  • 尽最大努力交付:UDP不保证数据包的可靠交付。数据包可能丢失或顺序错乱。
  • 无拥塞控制:UDP不进行拥塞控制。因此,它可能会在网络条件糟糕时继续发送数据包,加剧网络拥堵。
  • 支持一对一、一对多、多对一和多对多的交互通信
  • 头部开销小:UDP头部只有8字节,相比之下,TCP头部最小为20字节。

UDP报文结构

UDP报文段结构相对简单,包含以下几个字段:

  1. 源端口号(Source Port) - 16位:可选字段,用于标识发送方的端口号。在响应消息时,接收方会使用这个端口号将消息返回给发送方。
  2. 目的端口号(Destination Port) - 16位:用于标识接收方的端口号。这是处理接收到的数据报并将其定向到正确应用程序的关键信息。
  3. 长度(Length) - 16位:指UDP头部和数据总共占用的字节。最小值是8(仅有头部时)。
  4. 校验和(Checksum) - 16位:用于检测头部和数据在传输过程中是否发生错误。这是可选的字段,对于IPv4来说,但在IPv6中则是必须的。

UDP数据包的结构设计上追求的是尽可能的简洁,以减少传输的数据量,降低处理延迟。这也是为什么UDP在那些对时间敏感的应用中非常受欢迎,尽管它无法保证数据的可靠性和顺序。

从什么端口发给什么端口,不管发送过的报文是否被确认,一个报文就是一个消息

开发应用人员在UDP上构建应用,关注以下几点:

1.应用进程更容易控制发送什么数据以及何时发送
2.无需建立连接
3.无连接状态
4.首部开销小

UDP与TCP比较

TCP类似打电话(同步),双方建立连接后才能够说话,可以确保双方能听到各自的声音

UDP类似发短信(异步),不是一种面向连接的服务,你随时可以发送短信,但是不能确保对方及时收到,应用:直播,以前的QQ,日志

TCPUDP
面向连接无连接
提供可靠性保证不可靠
资源占用多资源占用少

  • 13
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值