socket:套接字,应用程序通过socket向网络发出请求或者应答请求。
数据链路层,网络层,传输层是在内核中实现的,因此操作系统实现一组系统调用,使得应用程序能够访问这些协议提供的服务
TCP:(数据可靠)
UDP:(数据不可靠,实时视频传输)
用到udp的情况:
1,实时音视频是可以而且应该用 UDP 的,一方面因为它常常涉及到网络穿透,另外一方面它不需要重传。——我需要实时的看到你的图像跟声音,至于中间丢一帧什么的完全不重要。而为了重传往往会造成延迟与不同步,考虑一下,某一帧因为重传,导致0.5秒以后才到,那么整个音视频就延迟了0.5秒。考虑一下接收方看视频,如果使用 TCP 导致视频的中间延迟了0.5秒,只要我不按「快进」键,那么后续的视频全都会比发送方延迟0.5秒。这种延迟是累加的,随着持续丢帧,延迟会越来越大,达到数秒,甚至分钟级,这会严重影响实时音视频的用户体验。因此「实时音视频聊天」功能通常都会使用 UDP 实现。2,网络真的非常非常可靠,以至于你完全不需要考虑 UDP 丢包问题的情况。典型的例子应该是专门为有线局域网设计的协议。3,另外一个问题是 TCP 是纯粹的流式数据,所以制定传输协议的时候,接受方需要自行判定一个包的开始和结束,因为你完全可能接受到半个包或者两个包。——如果数据报的起止判定对你具体的程序会成为大问题,也可以考虑 UDP。
作者:pansz
链接:https://www.zhihu.com/question/20060141/answer/26740833
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
例如:王者荣耀,绝地求生都是运用了udp协议,
client是根据server的‘’ip地址+端口号”找到对方并建立链接
(1)、ip地址:不用说了,就是192.168.6.xxx之类(一个主机可能有多个ip)。
(2)、端口:同一个ip下又可分为多个端口,做个比喻吧:ip相当于一个大别墅,多个端口相当于别墅里的多个房间,数据就相当于客人,客人可以进不同的房间干不同的事情(即业务)。
1、socket有哪几种类型:
Socket是一组编程接口(API), 是对TCP/IP协议的封装和应用。介于传输层和应用层.
(1)基于TCP的socket,:提供给应用层可靠的流式数据服务,使用TCP的Socket应用程序协议:BGP,HTTP,FTP,TELNET等。优点:基于数据传输的可靠性。
(2)基于UDP的Socket:适用于数据传输可靠性要求不高的场合。基于UDP的Socket应用程序或协议有:RIP,SNMP,L2TP等。
(3)基于RawIp的Socket:非连接,不可靠的数据传输。特点:能使应用程序直接访问网络层。基于RawIp的Socket有ping ,tracert,ospf等。
(4)基于链路层的Socket。为IS-IS协议提供的Socket接口。使IS-IS协议可通过Socket直接访问链路层。非连接,不可靠通信服务。
2、大小端
大端模式:是指数据的高位,保存在内存的低地址中,而数据的低位,保存在内存的高地址中。
小端模式:是指数据的高位,保存在内存的高地址中,而数据的低位,保存在内存的低地址中。
主机字节序列是小端模式。
网络字节序列定义:收到的第一个字节被当作高位看待,这就要求发送端发送的第一个字节应当是高位。而在发送端发送数据时,发送的第一个字节是该数字在内存中起始地址对应的字节。可见多字节数值在发送前,在内存中数值应该以大端法存放。
网络字节序列是大端字节序。
问:字节序是什么?为什么要转换字节序?
答:由于进行网络传输的双方不一定在同一个主机上,可能是PC—-PC
或者PC—-ARM…等等不同架构之间通信,而存在大端和小端的说法。
3、listen创建监听队列
存放待处理的客户端连接,当客户端发出connect连接请求,服务器端会收到此请求
4、accept接收一个链接
从listen完成的链接队列里面取出一个链接,如果队列为空,accept将阻塞,一直等到有客户端链接为止
总结的比较好的博客,
博客地址:https://blog.csdn.net/m0_37947204/article/details/80489431