TCP/IP协议

TCP/IP协议

一、计算机网络体系结构分层

主流网络分层体系结构有两种:
OSI(Open Systems Interconnection Reference Model,开放系统互联基本参考模型),就是常说的七层网络模型。
TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/因特网协议) 四层网络模型,也有人愿意归为 “五层网络模型”,以其中最重要的 TCP 协议和 IP 协议命名。
在这里插入图片描述

OSI 参考模型注重“通信协议必要的功能是什么”,而 TCP/IP 则更强调“在计算机上实现协议应该开发哪种程序”。

二、TCP/IP模型分层

1.TCP/IP 的具体含义

从字面意义上讲,有人可能会认为 TCP/IP 是指 TCP 和 IP 两种协议。实际生活当中有时也确实就是指这两种协议。然而在很多情况下,它只是利用 IP 进行通信时所必须用到的协议群的统称。具体来说,IP 或 ICMP、TCP 或 UDP、TELNET 或 FTP、以及 HTTP 等都属于 TCP/IP 协议。他们与 TCP 或 IP 的关系紧密,是互联网必不可少的组成部分。TCP/IP 一词泛指这些协议,因此,有时也称 TCP/IP 为网际协议群。互联网中信息以数据包的单位传输,不同的协议层对数据包有不同的称谓包可以说是全能性术语;
用于表示数据链路层中包的单位;
数据包是 IP 和 UDP 等网络层以上的分层中包的单位;
则表示 TCP 数据流中的信息;
消息是指应用协议中数据的单位。
每个分层中,都会对所发送的数据附加一个首部,在这个首部中包含了该层必要的信息,如发送的目标地址以及协议相关信息。通常,为协议提供的信息为包首部,所要发送的内容为数据。在下一层的角度看,从上一层收到的包全部都被认为是本层的数据。
在这里插入图片描述
2.物理介质层

物理介质是连接网络终端设备(计算机、交换机、路由器)的物理手段,最常见的有网线(双绞线),除此还有光纤、无线电波等。不同的物理介质决定了电信号传输的距离、带宽、速率、抗干扰能力等性能参数。
所以物理介质层主要解决的问题是:
规范了网络终端设备之间的电气、机械、流程和功能等方面的要求
规范了电频、速率、最大传输距离和物理接口等特征
物理层所带来的最直观的好处就是,我们可以使用同一根网线插进任何品牌的计算机上。

3.数据链路层

数据链路层是负责接收 IP 数据包并通过网络发送,或者从网络上接收物理帧,抽出 IP 数据包,交给 IP 层。
ARP 是正向地址解析协议,通过已知的 IP,寻找对应主机的 MAC 地址。
RARP 是反向地址解析协议,通过 MAC 地址确定 IP 地址。比如无盘工作站还有 DHCP 服务。
常见的接口层协议有:
Ethernet 802.3、Token Ring 802.5、X.25、Frame relay、HDLC、PPP ATM等
在这里插入图片描述
数据帧首部:占 14 字节,包含有目标主机网卡 MAC 地址、源主机网卡 MAC 地址以及数据帧类型标识
数据:从上层(网络层)传递下来的数据包,范围在 [46, 1500] 个字节之间
数据帧尾部:占 4 个字节,是 CRC 校验序列,用来确定数据帧在传输过程中是否有损坏。
以太网协议规定了接入网络的终端设备都必须安装有网络设配器(即 NIC 网卡),数据帧必须由网卡发送,再由另一张网卡接收。每张网卡都被分配一个 MAC 地址,具有全球唯一性。而数据接收方的 MAC 地址就被记录在数据帧首部。

MAC 地址为 6 字节,使用 12 个十六进制数表示,e.g. 00:01:6C:06:A6:2
前 6 个十六进制数为厂商编号,由 IEEE(电气和电子工程师协会)分配给厂商
后 6 个则为该厂商的网卡流水号,由厂商自己分配。
数据链路层主要解决的问题是:对电信号进行分组并形成具有特定意义的数据帧,然后以广播的形式通过物理介质发送给接收方。

4.网络层

网络层用来处理在网络上流动的数据包。数据包是网络传输的最小数 据单位。该层规定了通过怎样的路径(所谓的传输路线)到达对方计 算机,并把数据包传送给对方。

(1)IP协议

**IP(Internet Protocol,因特网协议)**是网络层的核心协议,规定了网络层的封装规范,将上层(传输层)传递下来的数据段附加上 IP 首部封装成 IP 数据包,又称数据报文,IP 数据包同样由包首部和数据两部分组成,只是数据部分实际为传输层的数据段。
提供的是一种不可靠的服务,它只是尽可能快地把分组从源结点送到目的结点,但是并不提供任何可靠性保证。同时被TCP和UDP使用。TCP和UDP的每组数据都通过端系统和每个中间路由器中的IP层在互联网中进行传输。
ICMP是IP协议的附属协议。IP层用它来与其他主机或路由器交换错误报文和其他重要信息。
IGMP是Internet组管理协议。它用来把一个UDP数据报多播到多个主机。
在这里插入图片描述
数据包首部:长度为 20 字节,数据部分最大长度为 65515 字节,一个 IP 数据包总长达 65535 字节。而下层数据帧的数据部分最长为 1500 个字节,所以如果 IP 数据包的实际长度超过了 1500,就需要对 IP 数据包进行分片处理,由多个数据帧发送。
在这里插入图片描述
Version 版本号:标识 IP 地址的版本,目前有 IPv4 和 IPv6 两个版本
Header Length 首部长度:标识 IP 首部长度
Type of Service 服务类型:前 3 位标识优先级,4-7 位分别标识时延、吞吐量、可靠性、开销(一个数据包只能有一位生效)
Total Length 总长度:标识 IP 数据包总长
Identification 鉴定字段:IP 数据包的唯一标识,如果数据包被分片传输,接收方会根据分片中的该字段值来判断哪些分片属于同一个数据报,以此进行分片重组。通常的每发送一份数据包该值就会被加 1。
IP Flags 标志位:标识 IP 数据包是否被分片。
Fragment Offset 偏移量:在接收方进行分片重组时,标识分片的顺序,指明了分片起始点相对于数据包起始点的偏移量。因为 IP 协议是无连接的非可靠传输协议,所以需要该字段来应对分片传输错序的情况。
TTL 生存时间:标识生存时长,指明了数据报可以经过的路由器数量,防止丢失数据包的无休止传播。初始值由源主机设置(通常为32或64),每经过一个路由器,该字段值就会减 1。如果数据包的 TTL 减至 0,那么路由器会丢弃该数据包并发送一个 ICMP 超时消息给数据包的源主机 IP 地址。
Protocol 协议:标识数据包数据部分来自于哪个协议(ICMP/IGMP/TCP/UDP/GRE/ESP)
Header Checksum 首部校验和:根据 IP 数据包首部计算出来的校验和
Option 选项:一个可变长的可选信息
Source Addres 源地址:IP 数据包源主机的 IP 地址
Destination Address 目标地址:IP 数据包的目标主机 IP 地址,是网关路由的关键依据。
IP 地址有 IPv4 和 IPv6 两个版本,通过子网掩码将 IP 地址分为网络号、主机号两个部分,前者标识了一个子网,后者标识了子网中的主机。如果两台主机处在同一子网,那么它们的网络号必须是相同的。IP 地址解决了 “如何轻易的进行子网划分” 的问题。

(2)ARP协议

IP 地址本质上是一个逻辑地址,为了解决上层复杂的子网架构问题而生,并不能作为最终定位主机的依据,这仍要依靠 MAC 地址来完成。因此,网络层还需要找到一种方法来完成 IP to MAC 的映射,ARP 协议应运而生。
ARP(Address Resolution Protocol,地址解析协议)提供了根据 IP 地址来获取 MAC 地址的能力,地址解析之名由此而来。

(3)路由协议

为了突破这一限制实现跨子网通信,网络层实现了路由协议。
路由协议提供了异构网(子网间)互联的能力,可以将一个子网的 IP 数据包发送到另一个子网。所谓 “路由” 即指导数据包转发的路径信息。路由协议是运行在路由器上的协议,在错综复杂的网络世界中,路由器充当了交通枢纽的角色,它会视实际的网络环境来选择最佳路径进行数据包转发,路由器是网络层的代表设备。
IP 数据包路由原理:主机间的通信时,首先会通过 IP 协议来判断两台主机是否处在同一子网。若是,直接交给 ARP 协议和以太网协议来完成子网广播。若不是,以太网协议则会将 IP 数据包发送到子网网关(一般为路由器)进行路由决策,在经过若干次网关路由转发之后,IP 数据包就进入到目标主机 IP 地址所处的子网中,最后还是通过子网广播完成主机定位。
可见,路由器和路由协议解决了 “如何隔离子网之间的广播信号” 和 “子网之间的计算机依旧能够通信” 的问题。

5.传输层

传输层的主要作用就是建立进程与进程之间的通信,即端到端之间的数据传输。
在传输层有两个性质不同的协议:TCP(Transmission Control Protocol,传输控制协议)和 UDP(User Data Protocol,用户数据报 协议)。

(1)端口号的确定

标准既定的端口号:这种方法也叫静态方法。它是指每个应用程序都有其指定的端口号
但并不是说可以随意使用任何一个端口号。例如 HTTP、FTP、TELNET 等广为使用的应用协议中所使用的端口号就是固定的。这些端口号被称为知名端口号,分布在 0~1023 之间;除知名端口号之外,还有一些端口号被正式注册,它们分布在 1024~49151 之间,不过这些端口号可用于任何通信用途。
时序分配法:服务器有必要确定监听端口号,但是接受服务的客户端没必要确定端口号。在这种方法下,客户端应用程序完全可以不用自己设置端口号,而全权交给操作系统进行分配。动态分配的端口号范围在 49152~65535 之间。
传输层的 PUD 为数据段(Segment),其首部也有 TCP 首部和 UDP 首部两种类型。
在这里插入图片描述
数据段首部为 8 字节,数据部分为上层应用数据占 65527 字节,总长不超过 65,535 字节,正好作为下层 IP 数据包的数据部分。

(2)TCP协议

TCP(Transmission Control Protocol,传输控制协议),是一种面向连接的可靠传输协议,提供可靠(无差错、不丢失、不重复、按顺序)的字节流数据传输服务。在传输效率和可靠性之间选择了后者,所以有开销大、传输速度慢的缺点。
面向连接:在使用 TCP 通信之前,需要进行 “三次握手” 建立发收双方连接,通信结束后还要进行 “四次挥手” 确保断开连接。
点对点:一条 TCP 连接只能连接两个端点。
全双工通信:允许通信双方任意时刻双向发送数据,发送方设有发送缓存,接收方设有接收缓存。
字节流传输:TCP 会将数据当作字节流进行处理,不尝试理解所传输的数据含义,仅把数据看作一连串的字节序列。

TCP 的可靠性传输具有非常复杂的实现细节,包括但不限于:
ACK 确定机制:当接收方接收到数据段后,会返回 ACK 确认
定时重发: 发送方发送数据段后,会启动定时器,超时未接收到 ACK 确认,会重发该数据段
数据校验:接收方会对数据段进行数据校验,如果发现数据段有差错,会将该数据段丢弃,等待超时重传
顺序传输:TCP 字节流会为每个字节排序,确保数据传输顺序的正确性
滑动窗口:TCP 数据段长度可根据收发双方的缓存、网络等状态而调整。接收方只允许发送方发送接收缓冲区所能接纳的数据,防止缓冲区溢出
TCP数据段首部
在这里插入图片描述
Sequence Number 序列号:字节流中的每个字节都要按序编号,该字段值为本数据段数据部分的第一个字节的序号
Acknowledgment Number 确认号:确认序列号
Offset 偏移量:数据段首部的长度,字段值为首部长度除以 4
Reserved 预留:保留位,供今后使用
TCP flags 标签:标识数据段性质。
Window 窗口:标识发送者接收窗口的大小
CheckSum 校验值:用于检查数据段在传输过程中是否出现差错
Urgent Pointer 紧急指针:当字段值为 1 时生效,标识本数据段具有紧急数据
其中的 TCP Flags 字段,是非常重要的功能标识,占 8 位,分别为:
C(CWR)、E(ECE):用于支持 ECN(显示阻塞通告)
U(URGENT):当值为 1 时,标识此数据段有紧急数据(比如紧急关闭),应优先传送,要与紧急指针字段配合使用
A(ACK):仅当字段值为 1 时才有效,建立 TCP 连接后,所有数据段都必须把 ACK 字段值置为 1
P(PUSH):若 TCP 连接的一端希望另一端立即响应,PSH 字段便可以 “催促” 对方,不再等到缓存区填满才发送返回
R(RESET):若 TCP 连接出现严重差错,该字段的值置为 1,表示先断开 TCP 连接,再重连
S(SYN,Synchronize Sequence Numbers):用于建立和释放连接,当字段值为 1 时,表示建立连接。
F(FIN):用于释放连接,当字段值为 1 时,表明发送方已经发送完毕,要求释放 TCP 连接
三次握手:
在这里插入图片描述
第一次握手:客户端将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给服务器端,客户端进入SYN_SENT状态,等待服务器端确认。
第二次握手:服务器端收到数据包后由标志位SYN=1知道客户端请求建立连接,服务器端将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给客户端以确认连接请求,服务器端进入SYN_RCVD状态。
第三次握手:客户端收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给服务器端,服务器端检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,客户端和服务器端进入ESTABLISHED状态,完成三次握手,随后客户端与服务器端之间可以开始传输数据了。
四次挥手:
四次挥手即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。在socket编程中,这一过程由客户端或服务端任一方执行close来触发。
由于TCP连接是全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭。
在这里插入图片描述
① 断开连接时,客户端发送 (FIN=1, seq=m) 数据段,其中 m 的数值为客户端最后一次向服务器发送的数据段的最后一个字节的序号再加上 1,客户端进入 FIN-WAIT-1 状态。
② 服务器接收到 (FIN=1, seq=m) 之后,返回 (ACK=1, ack=m+1, seq=n) 确认数据段,服务器进入 CLOSE-WAIT 状态。
③ 服务器再向客户端发送 (FIN=1, seq=u, ACK=1, ack=m+1) 数据段,服务器进入 LAST-ACK 状态。
④ 客户端接收到 (FIN=1, seq=u, ACK=1, ack=m+1) 数据段后,返回 (ACK=1, ack=u+1, seq=m+1) 确认数据段,服务器和客户端都进入 CLOSED 状态。四次挥手完成,TCP 连接就此断开。

(3)UDP协议

UDP(User Datagram Protocol,用户数据报协议),是一种无连接的非可靠传输层协议。UDP 不提供数据包分组、组装,不能对数据段进行排序,所以 UDP 数据段的首部非常简单。换句话说,当数据段发送出去之后,发送方是无法得知其是否完整且安全的到达了接收方的。这样的传输机制决定了它的最大优点就是快,同时也决定了它最大的缺点不可靠、不稳定。
在这里插入图片描述
UDP数据段首部:
Source Port 源应用程序端口:发送方的应用程序端口
Destination Port 目的应用程序端口:接收方的应用程序端口
Length 长度:数据段的长度
Checksum 校验值:用于检查数据段在传输过程中是否出现差错

6.应用层

向用户提供一组常用的应用程序,比如电子邮件、文件传输访问、远程登录等。远程登录 TELNET 使用 TELNET 协议提供在网络其它主机上注册的接口。TELNET 会话提供了基于字符的虚拟终端。文件传输访问 FTP 使用 FTP 协议来提供网络内机器间的文件拷贝功能。
应用层协议主要包括如下几个:FTP、TELNET、DNS、SMTP、NFS、HTTP。
FTP(File Transfer Protocol)是文件传输协议,一般上传下载用FTP服务,数据端口是 20H,控制端口是 21H。
Telnet 服务是用户远程登录服务,使用 23H 端口,使用明码传送,保密性差、简单方便。
DNS(Domain Name Service)是域名解析服务,提供域名到 IP 地址之间的转换,使用端口 53。
SMTP(Simple Mail Transfer Protocol)是简单邮件传输协议,用来控制信件的发送、中转,使用端口 25。
NFS(Network File System)是网络文件系统,用于网络中不同主机间的文件共享。
HTTP(Hypertext Transfer Protocol)是超文本传输协议,用于实现互联网中的 WWW 服务,使用端口 80。

参考链接:https://mp.weixin.qq.com/s/SV-dIgJw7NOcBqcnbh4jvA
https://www.360kuai.com/mob/transcoding?url=94efc1d0d1620910a&cota=4&kuai_so=1&sign=360_e39369d1&refer_scene=so_2
https://blog.youkuaiyun.com/qq_42855619/article/details/88827914
https://www.cnblogs.com/duanwandao/p/9941411.html
https://www.jianshu.com/p/191625b469ec
https://blog.youkuaiyun.com/freekiteyu/article/details/72236734
https://www.cnblogs.com/onepixel/p/7092302.html
https://mp.weixin.qq.com/s/Kl3xpoWnqO2yjuKvSVbfMQ
https://www.cnblogs.com/wxd0108/p/7687298.html
https://mp.weixin.qq.com/s/5u6O4olZmn2SYq76KAePjQ
https://www.jianshu.com/p/39b23068bb0f

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值