TCP/UDP/Socket 通俗讲解

1.封包和拆包

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

拆包,是接收到对方封包后发送来的数据后,拆出原始信息和对方的附加信息,以得知对方的来源。

像是拆信封。

2.TCP/UDP与socket

2.1 TCP 和UDP

TCP 是面向连接的传输,需要通信双方完成三次握手成功后,才能正常通信,四次挥手后断开

三次握手的目的是为了 通信双方的设备都没有问题,

四次挥手是为了确保断开的双方本次通信连接时占用的内存全部释放掉。

TCP 是基于字节流的传输,是按字节进行封装和发送的

TCP 是可靠的传输,不允许有丢包,重复发送(对包后重发时),接收顺序出现错误等

UDP 是面向无连接的,不需要握手

UDP 是继续数据报文的,不是一个字节一个字节封装和发送的,是分块发送的

UDP 是不可靠的传输,不负责接收方能够可靠的接收到消息,丢包后不会再做重发等弥补操作

UDP 相比于TCP 来说比较快,效率更高,但它是不可靠的

2.2 socket介绍

一个端口号只允许一个进程占用,所以我们通过这个端口号就能找到特定的应用程序进程

两台主机之间通过网络通信需要知道 对方ip(最终解析成的ip)

想要两台主机的两个进程之间通信,就必须知道对方的 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 发送也是类似

粉丝福利, 免费领取C/C++ 开发学习资料包、技术视频/项目代码,1000道大厂面试题,内容包括(C++基础,网络编程,数据库,中间件,后端开发/音视频开发/Qt开发/游戏开发/Linuxn内核等进阶学习资料和最佳学习路线)↓↓↓↓↓↓见下面↓↓文章底部点击免费领取↓↓ 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值