TCP/IP协议族

TCP/IP协议族包括了很多协议,本次我们详细介绍一些比较重要的协议

每层协议集

应用层

应用层常见的包括:FTP、HTTP、SMTP、DNS

FTP

ftp为文件传输协议(File Transfer Protocol,FTP)

作为网络通信中的基础工具,ftp允许用户通过客户端软件和服务器进行交互,实现文件的上传、下载和其他文件操作(通常运行在TCP上)

HTTP

HTTP为超文本传输协议

通过万维网(WWW)传输超文本数据(通常运行在TCP上);
HTTP是基于客户/服务器模式,且面向连接的;其工作过程为:客户于服务建立连接、客户向服务器提出请求、服务器接收请求,并根据请求返回相应的文件作为应答、客户与服务器关闭连接(建立连接,发送请求,发送响应消息,关闭连接)

SMTP

SMP为电子邮件传输的协议

SMTP是建立在FTP文件传输服务上的一种邮件服务,主要用于系统之间的邮件信息传递,并提供有关来信的通知。
使用SMTP,可实现相同网络处理进程之间的邮件传输,也可通过中继器或网关实现某处理进程与其他网络之间的邮件传输

工作流程:建立连接、邮件发送、连接释放

DNS

DNS为域名系统

互联网采用层次结构的命名树作为主机的名字,并使用分布式的域名系统 DNS。名字到 IP 地址的解析是由若干个域名服务器程序完成的。域名服务器程序在专设的结点上运行,运行该程序的机器称为域名服务器

传输层

在传输层有两个性质不同的协议:TCP(传输控制协议)、UDP(用户数据协议)

TCP/UDP

TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议
UDP是一种无连接的、不可靠的、面向数据报的传输层通信协议

TCP和UDP有以下特点:

  • TCP是有连接的,UDP是无连接的
  • TCP是可靠的,UDP是不可靠的
  • TCP是数据传输字节流,UDP是面向数据报
  • TCP、UDP都是全双工

有连接VS无连接

连接是一种抽象的概念,指客户端和服务器在进行数据通信前需要保存对端的关键信息(IP地址、端口号等)并且依赖保存的信息来发送/接收数据

TCP想要通信序先建立连接只有连接完成后才能完成后续的通信
UDP无需经过对方的同意就可以直接发送数据,并且不会保存对方的消息。客户端/服务器每次发送数据时都需指定IP和端口号才能完全数据的传输

可靠传输vs不可靠传输

在复杂的网络环境下,数据传输可能存在丢包的情况,这可能会导致得到的信息不能正确解析;
面对这种情况,TCP会将丢失的数据包重新传输来保证通信双方尽量得到正确的数据,原因是TCP内部提供了一些操作来保证这种可靠传输
UDP则没有这种可靠传输机制,如果数据包在网络传输中丢失了,UDP也不知道,因此不会重传

面对字节流vs面对数据报

TCP与文件操作一样,都是以字节为单位进行数据传输。所有的数据都被视为一连串的字节流,在传输时会被分割成若干大小和时的数据段,到达后在按照顺序被重新组装成完整的字节流
由于数据以一连串字节流的形式存在,因此在写入或读取时没有严格要求的对应关系,即数据读取时可根据需要读取任意字节数的数据

UDP是面向数据报传输数据,所有的数据都被视为一个个的数据报,其中每个UDP数据包都包含了完整的数据以及源/目的的端口IP等信息,因此数据在写入/读取时以单个数据报为单位

TCP/UDP都是全双工

全双工即通信双方既可以发数据,也可以收数据,且发送与接收可以同时进行,不需要等待对方完成操作

UDP协议

UDP报文格式

  • 源/目的端口号:用于绑定通信双方主机上的进程,表示数据从哪个进程发出,由哪个进程接收
  • UDP报文长度:UDP报文大小+UDP载荷大小,用来表示一个UDP数据包最大可以携带的数据范围,最大为2^16 = 64kb,单位为字节。当传输的数据大于报文长度,会自动进行分片和重组
  • UDP校验和:将UDP负载中的数据通过一定的计算方式得到的16位数据,用于检测UDP头部和数据部分传输过程中是否发生错误
    • 为什么校验和?
      数据在网络传输中,由于受到某些外部因素干扰,可能出现信号反转,导致数据传输发生错误
    • 如何通过校验和判断数据是否出错?
      先将数据在发送前进行校验和的计算,并将校验和与数据等信息一起发送出去;但数据被接收后,接收方进行校验和的计算,然后将得到的校验和与数据包中的校验和进行比较,若比较的结果不一致,则说明数据在传输过程中大概率出错了

UDP的使用场景

UDP适合于对高速传输和实时性要求较高、对稳定性和可靠性要求不高、可以容忍少数数据丢失的场景,如音频传输、广播等

TCP协议

TCP报文格式

TCP首部的大小是固定的20字节:源端口号2字节、目的端口号2字节、序列号4字节、确认序列号4字节、4位首部长度1字节,6位保留位1字节,6位控制位1字节、窗口大小2字节、校验和2字节、紧急指针2字节、选项(0-40字节)

  • 源/目的端口号(各2字节):这里的端口号与UDP报文中的端口号作用一样,都用于定位发送与接受的主机的进程
  • 32位序列号(4字节):范围是0-2^32-1,当序列号超过最大值时置0,序列号用于标识此次发送数据的顺序,它的值为该报文段中数据部分的第一个字节的序号
  • 确认序列号(4字节):确定序列号的值为某个TCP数据包中的序列号+数据的字节数,用于确认接收的数据:表示在该值之前的所有数据都已经被正确接收到,并期待下一次发送的数据为确认序列号之后的数据
  • 首部长度(4位1字节):也可以称为“数据偏移”,用于确认TCP首部长度,它表示一个0~15的数据,单位位4个字节,由于TCP拥有固定的20字节的首部,因此数据偏移最小值为5(若小于5则视为格式错误),因此一个TCP的数据包大小为20~60字节
  • 保留位(6位1字节):目前暂未使用,置0
  • URG(Urgent):当URG为1时,表示紧急指针有效,紧急指针所指示的数据优先处理
  • ACK:当ACK置1时,表示确认序列号字段的值有效,它用于确认接收的数据。在TCP连接的数据传出过程中,数据接收方每次收到数据后都会返回一个带ACK标志的TCP报文,通知发送端已成功接收到数据
  • PSH:当PSH置1时,表示数据接收端应尽快把接受的数据推送到应用层,而不是等待缓存区满后再传输
  • RST:当RST置1时,表示发生了严重的个错误或连接出现异常,需要中断TCP连接,重置连接状态
  • SYN(Synchronized):当SYN置1时,表示当前通信双方处于正在建立连接的状态通常出现在“三次握手”时候
  • 窗口大小(2字节):表示数据接收端允许发送端发送多个最大数据量
  • 校验和(2字节):用于检测TCP首部和数据部分在传输过程中是否发生错误
  • 紧急指针(2字节):表示紧急数据的结束位置在数据流钟得偏移量,当URG置1时有效
  • 选项(0~40字节):为可选字段,且长度不定,提供一些额外的功能和控制信息;若使用选项,则该字段的大小为4的整数倍

TCP协议的重要机制

TCP相比UDP之所以由更多的应用场景,最核心的因素时TCP提供可靠的传输,可靠的传输并不是要求网络数据100%到达,而是当数据丢包时TCP能有补救措施

网络层

IP

IP指网际互连协议,是TCP/IP体系中的网络层协议

IP指网络互连协议,Internet Protocol的缩写,是TCP/IP体系中的网络层协议。设计IP的目的是提高网络的可扩展性:一是解决互联网问题,实现大规模,易构网络的互联互通;二是分割顶层网络应用和底层网络技术之间的耦合关系,以利于两者的独立发展。根据端到端的设计原则。IP只为主机提供一种无连接,不可靠,尽力而为的数据包传输服务

  • 版本(4位)。
  • 首部字长(4位):这里的4位定义了数据报首部的长度,以4字节位单位的单位,当没有选项的时候为20字节,最大为20+40字节。
  • 服务类型(8位): 在最初这个字段有一部分用于定义数据包的优先级,剩下的一部分定义了服务类型。后期IETF改变了这个字段的解释,现在定义了一组区分服务。在这种解释中,前6位构成了码点,最后两位没有被使用。
  • 总长度(16位):这个16位字段定义了数据的总长度,单位为字节。
  • 标识(16位):标志从源主机发出的一个数据包,这样就确定了数据报的唯一性。这样是的数据报被片分后,在到达终点时终点能根据标识号将同一个数据报的片重新组装成一个数据报。
  • 标志(3位):第一位保留,第二位为“不分片”。第三位为“还有分片”。
  • 分片偏移(13位):这个13字段表示的是分片在整个数据报中的相对位置。这是数据在原始数据报中的偏移量,以8字节为单位
  • 生存时间(8位):这8个字段用来控制数据报所经过的最大跳数,每经过一个路由器这个字段都减1,减1后变为0,路由器就丢弃这个数据报。
  • 协议(8位):定义了IPV4的高层协议,TCP、UDP、ICMP等数据都将封装到IP数据报中。这个字段指明数据报必须交付哪个最终目的的协议。
  • 首部校验和(16位):检验IP数据报首部。
  • 源地址:定义了源地址的IP地址,这个字段始终保持不变。
  • 目的地址:定义了终点的IP地址,这个字段始终保持不变。

报文格式

最大主机号个数 = 2 的主机号位数次方 – 2(要排除全为 0 和全为 1 的地址)

特殊主机号

  • 主机号全为 0:
    当主机号全为 0 时,该 IP 地址表示的是网络地址,它代表整个网络,而不是网络中的某一台具体的主机。
    主要用于网络路由器和子网划分等。网络设备通过识别网络地址来确认数据应该被发送到哪个网络区域。当路由器接收一个数据包时,会检查目标 IP 的网络部分,将数据包转发到对应的网络
  • 主机号全为 1:
    主机号全为 1 的 IP 地址被用作广播地址。在一个特定的网络中,发送到这个地址的数据包会被该网络中所有的主机接收

ICMP

ICMP是Internet控制报文协议

它是TCP/IP的子协议,用于在IP主机、路由器之间传递控制信息;控制信息是指网络通不通、主机可否到达、路由器是否可用等网络本身的消息
并不传输用户数据,但对于传递用户数据起着重要作用

ICMP的报文包含在IP数据报中,属于IP的一个用户,IP的头部就是在ICMP报文的前面,所以一个ICMP报文包括IP头部、ICMP头部和CMP报文

ICMP协议应用在很多网络管理命令中

  • ping命令使用ICMP回送请求和应答报文
    在网络可达性测试中使用的分组网间探测命令 ping 能产生 ICMP 回送请求和应答报文。目的主机收到 ICMP 回送请求报文后立刻回送应答报文,若源主机能收到 ICMP 回送应答报文,则说明到达该主机的网络正常
  • 路由分析诊断程序tracert使用了ICMP时间超过报文
    tracert 命令主要用来显示数据包到达目的主机所经过的路径。通过执行一个 tracert 到对方主机的命令,返回数据包到达目的主机所经历的路径详细信息,并显示每个路径所消耗的时间

ARP

ARP是地址解析协议

是用在局域网中将IP地址解析为MAC地址的一种网络协议(MAC地址为标识网卡的物理地址,IP地址为标识主机的逻辑地址)
当网络中一台主机要与另一台主机通信的时候,他需要知道对方的MAC地址。然后IP与MAC地址并不属于一个层次,前者为网络地址,后者为数据链路层地址,因此需要ARP实现从IP到MAC的映射

ARP经过路由的过程:

  • 主机A需要与子网B中的主机通信
  • 主机A通过ARP请求获取其所在局域网内的网关(路由器)的MAC地址
  • 主机A将数据发送给网关
  • 网关通过路由表查找子网B,并将数据转发至子网B的路由器
  • 子网B的路由器通过ARP将数据包交给目的主机
如果您觉得这篇文章不错,且手里较为宽裕,可以支持一下博主,一分也是缘分😊
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇