在网络数据传输过程中有可能会存在数据丢包、延时、重复等问题,为了使对数据传输的处理更加简单直观,对该过程进行分层。
OSI(Open System Interconnection)7层参考模型,是国际标准化组织(ISO)制定的一个用于计算机或通信系统之间互联的标准体系,是一个七层的、抽象的模型体,不仅包含各种名词的抽象定义和概念,也包括,具体的协议。该模型总共分为应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。
TCP/IP协议在一定程度上参考了OIS7层模型,是具体的实现。已经成为目前网络传输中最基础的协议。协议分不同层次进行开发,每一层分别负责不同的通信功能。一个协议族,比如 ,是 一组不同层次上的多个协议的组合。通常被认为是一个四层协议系统,相比于OSI7层模型,少了表示层、会话层和物理层。
程序:应用层
公共内核(操作系统):传输控制层(也叫运输层TCP、UDP协议)、网络层(IP协议、ICMP、IGMP)、数据链路层(以太网协议)、物理层(有些书上不包括这一层)
端系统(end system):pc、服务器(应用层和运输层使用端到端协议end to end)
中间系统(intermediate system):路由器(网络层使用逐跳协议hop to hop)
环回地址:127开头的IP都是(127.0.0.1)
MTU:最大传输单元,以太网和802.3对数据帧的长度有限制,链路层的这个特性称作MTU,即
路径上最小的MTU,是路径MTU,因此MTU计算出方向MTU
确认时延:最长等待200 ms确认是否有回复消息,然后将回复消息和确认消息一起返回。
Nagle算法:该算法要求一个TCP连接只能有一个未被确认的的未完成小分组,在该分组的确认到达之前不在发送其他的小分组。相反,发送端收集这些少量的分组,并在确认到来时以一个分组的方式发送出去。也就是每一次发送的待发数据是不一样的。
优点:自适应的,确认到达的越快,消息发送的越快。
代价:产生时延,会等到响应后再发送。因此我们在需要实时反馈的某些操作中不建议使用Nagle算法,例如鼠标移动等。
TCP成块数据流
正常数据流:隔一个报文进行确认,连同第一个报文一起确认
慢启动:为发送方的TCP建立一个拥塞窗口(congestion window–c w n d)降低一开始就发送过多数据到网络里
TCP:提供面向连接的、可靠的连接
UDP:为应用程序发送和接收数据报,不同于TCP,是不可靠的
三次握手:
四次分手
TCP是可靠的,而IP是不可靠的,即TCP在不可靠的IP层上提供了一个可靠的传输层
TCP和UDP都用一个16bit的端口号来标识不同的应用程序(ftp telnet http)
数据报封装
滑动窗口:窗口左边已发送且接收方已确认收到,窗口大小由接收方通知发送方
如果数据要传输的数据较大,需要对文件进行分片时就会产生以下这种情况,每一次发送完数据,都需要等到接收端的返回数据才可以继续下一个数据包的传输,这样会在等待确认环节浪费大量的时间。
为了避免这种情况的发生,TCP引入了发送窗口的概念,如下,第一个数据包发送以后不需要等到确认回复就直接发送第二个数据包,同样的,第二个数据包也无需等到回复直接发送第三个,之后等收到第三个数据包的回应就继续传输。
传输速度和各参数间的关系,假设物理带宽为B,RTT为Tr,TCP一个RTT内发送的最大数据量为W,由此可以得出TCP发送数据的速率V=W / Tr,Tr可以看作理想状态下的定值,那么当V小于B的时候,那么唯一影响V的因素就是W,而W的大小由数据窗口的大小决定,即数据窗口的大小是唯一影响TCP发送速率的影响
在我查资料的时候没有找到相关的这一块,所以目前还是不太清楚这个滑动窗口是由什么来进行设置的,就先不写这些了,避免误人子弟
超文本传输协议HTTP(HyperText Transfer Protocol)是一种无状态的,以请求/应答的方式运行的协议,它使用可扩展的语义和自描述消息格式,与基于网络的超文本信息系统灵活的互动。
请求方式:如GET、POST、HEAD、PUT等,表示对资源的操作
请求目标:通常是一个URI,标记了请求要操作的资源
版本号:报文使用的HTTP协议版本,1.1以后都会有
版本号:HTTP协议版本
状态码:三位数,表示对请求的处理结果,如200表示成功,500是服务器错误等
原因:数字状态码的补充,帮助用户了解因响应结果
使用key:value的形式,最后用CRLF表示结束,如"Content-type:application/json",HTTP头字段非常灵活,不仅仅可以使用已有的头字段,也可以进行自定义。