TCP/UDP/Socket 通俗讲解

本文详细介绍了TCP/IP协议族中TCP和UDP的区别,包括它们的工作原理、可靠性和效率方面的对比。同时,文中还解释了封包和拆包的过程,以及socket在两台主机间进程通信中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.封包和拆包

封包,就是发送数据前把自己本地需要发送的数据包装一下,即把要发送的原始数据附加上接受者可以辨识到自己身份等一些额外信息。有点像寄一封信,信封上填写的寄件人和收件人以及地址。
拆包,是接收到对方封包后发送来的数据后,拆出原始信息和对方的附加信息,以得知对方的来源。
像是拆信封。

2.TCP/UDP与socket

2.1 TCP 和UDP
  1. TCP 是面向连接的传输,需要通信双方完成三次握手成功后,才能正常通信,四次挥手后断开
    三次握手的目的是为了 通信双方的设备都没有问题,
    四次挥手是为了确保断开的双方本次通信连接时占用的内存全部释放掉。
  2. TCP 是基于字节流的传输,是按字节进行封装和发送的
  3. TCP 是可靠的传输,不允许有丢包,重复发送(对包后重发时),接收顺序出现错误等
  4. UDP 是面向无连接的,不需要握手
  5. UDP 是继续数据报文的,不是一个字节一个字节封装和发送的,是分块发送的
  6. UDP 是不可靠的传输,不负责接收方能够可靠的接收到消息,丢包后不会再做重发等弥补操作
  7. UDP 相比于TCP 来说比较快,效率更高,但它是不可靠的
2.2 socket介绍
  1. 一个端口号只允许一个进程占用,所以我们通过这个端口号就能找到特定的应用程序进程
  2. 两台主机之间通过网络通信需要知道 对方ip(最终解析成的ip)
  3. 想要两台主机的两个进程之间通信,就必须知道对方的 ip和端口号,
    人们把ip加端口号抽象成了套接字,用来完成两台主机之前的进程通信,
    套接字也叫Socket,人们实现了Socket的一些细节,并暴露出一些API接口,
    供开发人员开发,我们叫它Socket API,SocketAPI 是提供开发者调用TCP 和UDP的api,
    开发者不需要了解太底层,直接使用这些Api 就能实现TCP点对点通信,以及UDP的点播,多播和光播通信。

3.TCP/IP 协议族 示意图

在这里插入图片描述

3.主机A 向主机B 通信时 各层数据的流向

应用层(封包) ---->传输层(封包)---->网络层(封包)---->对方网络接口层(封包并发送数据)---->对方网络接口层(拆包)---->对方网络层(拆包)---->对方传输层(拆包)
如下图箭头1,2,3,4,5,6,7,8流向
主机B 向主机A 发送也是类似
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值