socket入门知识、TCP和UDP的简述

socket简介

socket是一套不同于主机间通信的API,它工作在我们的TCP/IP 协议栈之上,它的应用场景也非常多:比如浏览器、手机应用,用于服务器管理的SSH客户端,全都是基于socket实现的。

要通过socket与不同主机之间建立通信,我们需要指定主机的IP地址和端口号,

【IP地址用于唯一标识你的网络设备,那为什么还要额外的指定一个端口号呢?】

因为如果没端口号,操作层系统就没有办法区分数据到底应该发送到哪一个应用上:

因此端口主要用于区分主机上的不同应用。

通过socket我们可以建立一条用于不同主机,不同应用之间的数据通道。一个形象的比喻就是将一条数据线链接在不同应用的插槽上,这也是socket这个名称的由来

(我在网上所搜socket的中文翻译成套接字到底是什么鬼?)

被我们所熟熟知的socket有两种类型,TCP和UDP

可以把socket想象成打电话,电话号码就是IP地址,打电话找谁就是端口号,协议就像是你说的是方言还是普通话,tcp就像是你每说一句话,对方都要说一声:"清楚明白"!udp就是,什么都不管,只管说就行了,也不管对方是否明白!tcp连接过程,就像是,打电话之后先说:"喂,你是xxx吗?",对方回答:"我是xxx!",然后你说:"好的,下面开始通话!"

TCP协议是非常可靠的,他的底层会自动检测并回传丢失的数据包,(也就是三次挥手,四次握手)因此对于调用者来说,你发送的数据对方一定会接收到,其次发送和接收到的数据顺序是完全一致的

TCP发送顺序是如何保证一致的?

        TCP协议将数据切分成为多个小片段,每个小片段的头部(header)和数据(payload)组成,为了确保抵达数据的顺序,TCP协议给每个片段的头部(header)都分配了序列号,方便后期按照序列号排序。

        当某个片段按照顺序发送后,发送方会将已发送的数据片段暂时保存到缓冲区,并为每个已发送的数据设置一个时间区间。

        当接收方收到正确的符合顺序的片段后,会优先对数据片段做完整检验,如确认无误,再把数据片段交给上层协议,并发送一个TCP片段反馈信息来告知(ACK acknowledge)发送方:我已经接收到这个片段了。这个TCP片段被称为ACK回复。打个比方:ACK回复发送的第一个片段序列号为T,其对应的ACK回复则为T+1,也就是接收方要接收的下一个发送片段的序列号。

        假设在规定时间内发送方收到接收方的TCP片反馈信息,则发送方可以释放缓冲区的数据,如若超时未收到应答,发送方则重新发送数据,直到收到应答,或者重发数据次数到达上限为止。

另外需要注意的是:TCP要求收发数据的双方扮演不同的角色:服务器和客户端。服务器会被动等待客户端的连接,他自己不会主动发起请求

UDP 用户报文协议:

UDP以报文为单位来收发数据,UDP不会自动回传丢失的数据包,因此不保证数据就一定能被对方接收到:

但是同时也正是缺少了这些检查的准备工作,所以UDP通常具有更低的延迟并占用更少的系统资源。它更加适合用于视频语音通话 这种实时性较高的应用场景。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值