一 下面三层(物理层,数据链路层,网络层)由网络运营商提供细节
System.out.println("...................尚未整理暂时省略");
二 应用程序负责传输层,应用层
2.1 UDP
UDP 用户数据包协议。以下为使用udp为传输层协议的传输层应用以及其应用层协议。DNS,TFTP(简单文件传送协议),RIP(路由信息协议),DHCP(动态主机配置协议),SNMP(简单网络管理协议),NFS(网络文件系统),IGMP(多播);
UDP无连接,尽最大努力交付,面向报文,没有拥塞控制,支持一对一,一对多,多对一,多对多通信方式,首部开销很小(8字节)。
UDP首部格式。由源端口,目的端口,长度,检验和四部分组成。每个字段的长度都是两字节。
2.2 TCP
TCP 传输控制协议。 TCP是传输层协议,以下为使用tcp为传输层协议的传输层应用以及其应用层协议。电子邮件-SMTP , 远程终端接入 - TELENT , 万维网 - HTTP , 文件传送-FTP ;
TCP是面向连接的传输层协议,点对点传输,提供可靠交付(无差错,不丢失,不重复,并且按序到达),提供全双工通信,面向字节流。
在java中 ,服务器通过serverSocket.accept() 来开启服务器套接字连接。(设置一个端口号) ; 而客户端通过一个套接字来新建一个socket对象来访问服务器的套接字。然后建立一个tcp连接。 每一条tcp连接唯一地被通信两端的两个端点(即两个套接字)所确定。
当然两个套接字可以有多条tcp连接,但是一调tcp连接只由两个套接字所确定。
TCP的三次握手 , 和四次挥手图解。
2.3 TCP和UDP区别
1. tcp是面向连接,有状态的 ; udp是无连接,无状态的。
2. tcp是可靠传输,具有三次握手协议保证连接,数据传输结束四次分手释放连接 ; 丢失重传机制保证数据完整性 ; 还有拥塞控制流量控制等 ;
3. udp只是仅提供尽力交付 ; 没有其他功能。
4. tcp头部20字节,udp只有8字节。
5. 由于udp是不需要建立连接并且没有上下文,所以udp的响应速度比tcp快。
2.4 可靠传输的工作原理
tcp发送的报文是向下交给ip层来传送的,但是IP层只是提供最大努力服务。也就是说,tcp下面的网络所提供的是不可靠传输,因此tcp必须采用适当的措施才能保证两个传输层之间的通信变得可靠。
2.4.1 停止等待协议
停止等待,就是每发送完换一个分组就停止发送,等待对方的确定,知道收到确定后在发送下一个分组。
其中包含一个超时重传进制,带有一个超时计时器。如果在计时内没有收到确定,则在发送一个同样的分组,知道确定。
几种情况分析。无差错情况,出现差错,确定丢失和确定迟到。
这种方式信道利用率很低。
这种可靠传输协议也叫做 自动重传请求 ARQ。
2.4.2 连续ARQ协议
使用滑动窗口协议。
滑动窗口就是 对于一连串的数据报。先设定窗口大小为N , 首先把0 -(N-1)的数据报发送,如果0的确认被收到,则窗口向前移动一个单位,则发送N数据报,若发送N个数据后等待一个时延后认定为超时重传,则重传0。
相比于停止等待协议,这种协议提高了信道利用率。主要体现在,发送方在发送数据报的时候也可以处理确认收到请求。
会发现 自动重传只能够保证数据包能够按序的发送到接收方,但是对于数据包本身并没有保证,所以还需要了解tcp首部,tcp报文段首部包含对于数据包内容的描述, 接收方可以根据其完成对数据包内容完整性和真实性的检查。进而完成可靠传输的实现。
2.5 TCP报文段首部
源端口 2 ;目的端口 2 ;序号 4 ;确认号(期望收到对方下一个报文段的第一个数据字节的序号) 4 ;
数据偏移 4 ;保留 6 ;然后是六个控制位 紧急URG , 确定ACK , 推送PSH , 复位RST , 同步SYN , 终止FIN;
窗口 2 ;检验和 2 ;紧急指针 2 ;选项 长度可变。
所以在没有选项这一个部分时,tcp首部长度为20字节。
2.6 tcp的拥塞控制
仅仅是个人对于拥塞控制的简单理解。初步学习笔记。
TCP的发送窗口是一个很好的想法。它辅助实现可靠传输,通过窗口值得更改实现了流量控制;并在拥塞控制上也有一定助益。
首先介绍一下进行拥塞控制的四种算法。 慢开始,拥塞避免,快重传,快恢复。
2.6.1 慢开始和拥塞避免
发送方为此一个叫做拥塞窗口cwnd的状态变量,拥塞窗口的大小取决于网络的拥塞程度,并且动态的在变化。
发送方让自己的发送窗口等于拥塞窗口。(如果接收方的接受能力减弱,发送窗口还可能小于拥塞窗口)。
发送方控制拥塞窗口的原则是:只要网络没有出现拥塞,拥塞窗口就再增大一些,以便把更多的分组发送出去。但是只要网络出现拥塞,拥塞窗口就减小一些,以减少注入到网络中的分组数。
慢开始就是在主机开始发送数据的时候,先探测一下,即有小到大逐渐增大发送窗口,也就是说,有小到大逐渐增大拥塞窗口数值。(没经过一个乱刺,拥塞窗口cwnd就加倍,一个轮次时间通常就是一个RTT,往返时间)。
拥塞避免算法就是对慢开始的一种补充。实质指,拥塞窗口cwnd按线性规律缓慢增长,一般来说cwnd大小每次+1。
在实际网络中。第一,当tcp连接时进行初始化,把拥塞窗口cwnd设置为1,(慢开始门限的初始值设置为16个报文段,即ssthresh = 16)。第二,在开始执行慢开始算法,拥塞窗口设置为1,然后被刺收到一个ack,就把拥塞窗口加倍,直到达到门限值16。然后执行拥塞避免算法,每次收到一个ACK时,拥塞窗口+1。
如果此时网络出现拥塞现象,则将拥塞窗口初始化为1,ssthresh修改降低,然后重新执行慢启动算法,再到拥塞避免算法。
2.6.2 快重传和快恢复
快重传 要求 接收方没收到一个失序的报文段后就立即发出重复请求,而不要等待自己发送数据时才进行捎带确认。(也就是即使发送对未到达数据的重传请求)
快恢复 也是针对于快重传提出的,当发送方连续收到 三个重复确认时,就执行乘法减小算法。把慢开始门限ssthresh减半,并且把cwnd的值设置为ssthresh,然后执行拥塞避免算法。
注:发送方的cwn到一定不能超过对方给出的接受窗口值rwnd。
3 应用层
3.1 http
HTTP头部,状态码,cookie,HTTP无状态的,HTTP传输数据流程。