C++学习笔记(49)

342、socket 函数详解
一、什么是协议
人与人沟通的方式有很多种:书信、电话、QQ、微信。如果两个人想沟通,必须先选择一种沟通的
方式,如果一方使用电话,另一方也应该使用电话,而不是书信。
协议是网络通讯的规则,是约定。 二、创建 socket
int socket(int domain, int type, int protocol);
成功返回一个有效的 socket,失败返回-1,errno 被设置。
全部网络编程的函数,失败时基本上都是返回-1,errno 被设置。
只要参数没填错,基本上不会失败。
不过,单个进程中创建的 socket 数量与受系统参数 open files 的限制。(ulimit -a )
1)domain 通讯的协议家族
PF_INET IPv4 互联网协议族。
PF_INET6 IPv6 互联网协议族。
PF_LOCAL 本地通信的协议族。
PF_PACKET 内核底层的协议族。
PF_IPX IPX Novell 协议族。
IPv6 尚未普及,其它的不常用。
2)type 数据传输的类型
SOCK_STREAM 面向连接的 socket:1)数据不会丢失;2)数据的顺序不会错乱;3)双向通
道。
SOCK_DGRAM 无连接的 socket:1)数据可能会丢失;2)数据的顺序可能会错乱;3)传输
的效率更高。
3)protocol 最终使用的协议
在 IPv4 网络协议家族中,数据传输方式为 SOCK_STREAM 的协议只有 IPPROTO_TCP,数据传输方
式为 SOCK_DGRAM 的协议只有 IPPROTO_UDP。
本参数也可以填 0。
socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); // 创建 tcp 的 sock
socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP); // 创建 udp 的 sock
三、TCP 和 UPD
1)TCP 和 UDP 的区别
TCP
a)TCP 面向连接,通过三次握手建立连接,四次挥手断开连接; 面试的重点
b)TCP 是可靠的通信方式,通过超时重传、数据校验等方式来确保数据无差错,不丢失,不重复,
并且按序到达;
c)TCP 把数据当成字节流,当网络出现波动时,连接可能出现响应延迟的问题;
d)TCP 只支持点对点通信;
e)TCP 报文的首部较大,为 20 字节;
f)TCP 是全双工的可靠信道。
UDP
a)UDP 是无连接的,即发送数据之前不需要建立连接,这种方式为 UDP 带来了高效的传输效率,
但也导致无法确保数据的发送成功;
b)UDP 以最大的速率进行传输,但不保证可靠交付,会出现丢失、重复等等问题;
c)UDP 没有拥塞控制,当网络出现拥塞时,发送方不会降低发送速率;
d)UDP 支持一对一,一对多,多对一和多对多的通信;
e)UDP 报文的首部比较小,只有 8 字节;
f)UDP 是不可靠信道。
2)TCP 保证自身可靠的方式
a)数据分片:在发送端对用户数据进行分片,在接收端进行重组,由 TCP 确定分片的大小并控制分
片和重组;
b)到达确认:接收端接收到分片数据时,根据分片的序号向对端回复一个确认包;
c)超时重发:发送方在发送分片后开始计时,若超时却没有收到对端的确认包,将会重发分片;
d)滑动窗口:TCP 中采用滑动窗口来进行传输控制,发送方可以通过滑动窗口的大小来确定应该发
送多少字节的数据。当滑动窗口为 0 时,发送方不会再发送数据;
e)失序处理:TCP 的接收端会把接收到的数据重新排序;
f)重复处理:如果传输的分片出现重复,TCP 的接收端会丢弃重复的数据;
g)数据校验:TCP 通过数据的检验和来判断数据在传输过程中是否正确。
3)UDP 不可靠的原因
没有上述 TCP 的机制,如果校验和出错,UDP 会将该报文丢弃。
4)TCP 和 UDP 使用场景
TCP 使用场景
TCP 实现了数据传输过程中的各种控制,适合对可靠性有要求的场景。
UDP 使用场景
可以容忍数据丢失的场景:
 视频、音频等多媒体通信(即时通信);
 广播信息。
5)UDP 能实现可靠传输吗?
这是个伪命题,如果用 UDP 实现可靠传输,那么,应用程序必须实现重传和排序等功能,非常麻烦,
还不如直接用 TCP。谁能保证自己写的算法比写 TCP 协议的人更牛?
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值