1. 首先说下网络5层协议:应用层、传输层、网络层、数据链路层、物理层。
2. Http: 属于应用层协议,封装对数据的描述
请求行:get/post
消息包头:包括客户端的一些信息(浏览器一些信息、user-agent……
消息正文:请求参数
HTTP允许传输任意类型的数据对象。类型由Content-Type加以标记。
3. TCP/UDP:属于传输层协议,描述了Http里面的数据怎么在网络上传输
TCP:每次请求都会建立一个tcp连接,3次握手,请求完成后释放连接。可靠传输,没有大小限制,但速度较慢。
UDP:不可靠传输,数据不能超过64k,速度较快。可以利用丢包重发机制来提高UDP的可靠性。
4. Socket是在应用层和传输层的抽象
所有对tcp的操作都封装在socket里面
ps:
1、TCP在网络通信上有极强的生命力,例如远程连接(Telnet)和文件传输(FTP)都需要不定长度的数据被可靠地传输。但是可靠的传输是要付出代价的,对数据内容正确性的检验必然占用计算机的处理时间和网络的带宽 ,因此TCP传输的效率不如UDP高。
2、UDP操作简单,而且仅需要较少的监护,因此通常用于局域网高可靠性的分散系统中client/server应用程序。例如视频会议系统,并不要求音频视频数据绝对的正确,只要保证连贯性就可以了,这种情况下显然使用UDP会更合理一些。
在源主机上,应用层将一串应用数据流传送给传输层
简单说下5层协议工作流程:
●传输层将应用层的数据流截成分组,并加上TCP报头形成TCP段,送交网络层。
●在网络层给TCP段加上包括源、目的主机IP地址的IP报头,生成一个IP数据包,并将IP数据包送交链路层。
●链路层在其MAC帧的数据部分装上IP数据包,再加上源、目的主机的MAC地址和帧头,并根据其目的MAC地址,将MAC帧发往目的主机或IP路由器。
●在目的主机,链路层将MAC帧的帧头去掉,并将IP数据包送交网络层。
●网络层检查IP报头,如果报头中校验和与计算结果不一致,则丢弃该IP数据包;若校验和与计算结果一致,则去掉IP报头,将TCP段送交传输层。
●传输层检查顺序号,判断是否是正确的TCP分组,然后检查TCP报头数据。若正确,则向源主机发确认信息;若不正确或丢包,则向源主机要求重发信息。
●在目的主机,传输层去掉TCP报头,将排好顺序的分组组成应用数据流送给应用程序。这样目的主机接收到的来自源主机的字节流,就像是直接接收来自源主机的字节流一样。