TCP/IP知识总结(TCP/IP协议族读书笔记三)
2016-03-10 10:35
483 查看
接下来,总结传输层的两大协议UDP和TCP。
一.UDP(用户数据报协议)
讲UDP之间,先了解两个概念:有连接和无连接。
有连接:通信之前,通信双方必须建立一条通道;
无连接:不需要建立通道,发送方只管发,接收方收不收得到不关心。
而UDP叫做无连接、不可靠的运输协议。除了提供进程到进程(而不是主机到主机)的通信之外,就没给IP服务添加任何东西。此外,它还完成非常有限的差错检验。说完它的缺点,那它的优点呢?UDP是个非常简单的协议,只有最小的开销。不考虑可靠性,发送的消息又很短时,就可以用UDP!
这里又提到两个概念:进程到进程的通信,主机到主机的通信
进程到进程的通信:IP协议将报文交付给目的计算机,这是一种不完整的交付。这个报文必须交到正确的进程。这就是UDP干的。
完成进程到进程的通信有好几种方法,最常用的就是通过客户--服务器范例(C/S)。
在互联网中,主机是用IP来定义自己,而进程就需要用端口号来定义自己:熟知端口(0~1023);注册端口(1024~49151);动态端口(49152~65535)。常见的几个熟知端口7-->echo(把收到的数据回送到发送端);13-->daytime(返回日期和时间);69-->TFTP(简单文件传送协议)。
套接字:网络IP加端口号。
UDP有8个字节的固定首部,格式如下:
差错控制:当接收端使用检验和并检测出差错时,就悄悄的将这个用户数据报丢掉。
二.TCP(传输控制协议)
像UDP一样,TCP也是进程到进程的协议。因此,也使用端口号。与UDP不同的是,TCP是面向链接的协议,两个TCP之间建立一条虚连接(不是物理连接)也是可靠的。此外,TCP在运输层使用流量控制和差错控制机制。格式如下:
控制位:
URG-->紧急指针字段值有效
ACK-->确认字段值有效
PSH-->推送数据
RST-->连接必须复位
SYN-->在连接建立时必须对序号进行同步
FIN-->终止连接
窗口值:这个字段定义对方必须维持的窗口值。注意到这个字段是16位长,因此窗口值的最大长度是65535字节。
接下来,看看TCP在整个通信过程中的时序:
从上图中我们清楚的看出,在连接开始阶段,客户端发送了个一个SYN报文段,报文段中只有SYN标志位被置为1,用来同步序号,消耗一个序号。接下来服务器发送了一个SYN+ACK的报文段,同步自己的初始序号,以便向客户端发送字节。同时发出一个ACK确认报文,表面确认收到来自客户端的SYN报文,并期望客户端继续发送下一个序号。SYN+ACK,不携带数据,消耗一个序号。ACK如果不携带数据,就不消耗序号。
再来看连接关闭阶段的四次握手:从客户端到服务器的收据传送结束了,给服务器发送一个FIN报文段,连接进入半关闭,客户端进入FIN_WAIT状态。这时服务器仍然可以发送数据。当服务器已经把所有处理过的数据都处理完毕后,就发送一个FIN报文段,并且被客户发来的ACK予以确认。
TIME_WAIT:
收到第二个FIN,已发送ACK;等带2MSL超时。可是我们为什么要2MSL的时间进行TIME_WAIT呢?两个理由:1.如果最后一个ACK报文段丢失了,那么服务器TCP以为它的FIN丢失了,如果客户端进入CLOSED状态,并在2MSL计时器超时就关闭了这条连接,那么客户端永远收不到FIN,服务器也就永远收到关闭的ACK。2.前一个连接中的重复报文有可能到达新的连接中,被解释为属于新连接的报文段,为了避免这个问题,就设置为了2MSL的等待时间。
一.UDP(用户数据报协议)
讲UDP之间,先了解两个概念:有连接和无连接。
有连接:通信之前,通信双方必须建立一条通道;
无连接:不需要建立通道,发送方只管发,接收方收不收得到不关心。
而UDP叫做无连接、不可靠的运输协议。除了提供进程到进程(而不是主机到主机)的通信之外,就没给IP服务添加任何东西。此外,它还完成非常有限的差错检验。说完它的缺点,那它的优点呢?UDP是个非常简单的协议,只有最小的开销。不考虑可靠性,发送的消息又很短时,就可以用UDP!
这里又提到两个概念:进程到进程的通信,主机到主机的通信
进程到进程的通信:IP协议将报文交付给目的计算机,这是一种不完整的交付。这个报文必须交到正确的进程。这就是UDP干的。
完成进程到进程的通信有好几种方法,最常用的就是通过客户--服务器范例(C/S)。
在互联网中,主机是用IP来定义自己,而进程就需要用端口号来定义自己:熟知端口(0~1023);注册端口(1024~49151);动态端口(49152~65535)。常见的几个熟知端口7-->echo(把收到的数据回送到发送端);13-->daytime(返回日期和时间);69-->TFTP(简单文件传送协议)。
套接字:网络IP加端口号。
UDP有8个字节的固定首部,格式如下:
差错控制:当接收端使用检验和并检测出差错时,就悄悄的将这个用户数据报丢掉。
二.TCP(传输控制协议)
像UDP一样,TCP也是进程到进程的协议。因此,也使用端口号。与UDP不同的是,TCP是面向链接的协议,两个TCP之间建立一条虚连接(不是物理连接)也是可靠的。此外,TCP在运输层使用流量控制和差错控制机制。格式如下:
控制位:
URG-->紧急指针字段值有效
ACK-->确认字段值有效
PSH-->推送数据
RST-->连接必须复位
SYN-->在连接建立时必须对序号进行同步
FIN-->终止连接
窗口值:这个字段定义对方必须维持的窗口值。注意到这个字段是16位长,因此窗口值的最大长度是65535字节。
接下来,看看TCP在整个通信过程中的时序:
从上图中我们清楚的看出,在连接开始阶段,客户端发送了个一个SYN报文段,报文段中只有SYN标志位被置为1,用来同步序号,消耗一个序号。接下来服务器发送了一个SYN+ACK的报文段,同步自己的初始序号,以便向客户端发送字节。同时发出一个ACK确认报文,表面确认收到来自客户端的SYN报文,并期望客户端继续发送下一个序号。SYN+ACK,不携带数据,消耗一个序号。ACK如果不携带数据,就不消耗序号。
再来看连接关闭阶段的四次握手:从客户端到服务器的收据传送结束了,给服务器发送一个FIN报文段,连接进入半关闭,客户端进入FIN_WAIT状态。这时服务器仍然可以发送数据。当服务器已经把所有处理过的数据都处理完毕后,就发送一个FIN报文段,并且被客户发来的ACK予以确认。
TIME_WAIT:
收到第二个FIN,已发送ACK;等带2MSL超时。可是我们为什么要2MSL的时间进行TIME_WAIT呢?两个理由:1.如果最后一个ACK报文段丢失了,那么服务器TCP以为它的FIN丢失了,如果客户端进入CLOSED状态,并在2MSL计时器超时就关闭了这条连接,那么客户端永远收不到FIN,服务器也就永远收到关闭的ACK。2.前一个连接中的重复报文有可能到达新的连接中,被解释为属于新连接的报文段,为了避免这个问题,就设置为了2MSL的等待时间。
相关文章推荐
- HTTP和HTTPS协议
- NTRIP/ SUPL
- Referenced file contains errors (http://www.springframework.org/schema/beans/spring-beans-3.0.xsd).
- 2015-2016-2 《网络攻防实践》 学生博客
- TCP/IP解析
- Android-BaseLine框架初识之网络请求(一)
- http与https的区别
- TCP、UDP、IP 协议分析
- 2015-2016-2 《网络攻击与防范》 学生博客
- TCP/IP、UDP、HTTP、Socket到底是什么
- 《企业网络》评选的十大WLAN设备商
- 最简单的基于Flash的流媒体示例:网页播放器(HTTP,RTMP,HLS)
- HttpUploader2-queue版本
- 阿里独家揭秘:淘宝全站HTTPS 改造细节
- 在 swift中处理网络请求
- 爬虫训练营-开篇
- C++中公有继承、保护继承、私有继承的区别 http://www.cnblogs.com/qlwy/archive/2011/08/25/2153584.html
- SQL Server 建立连接时出现与网络相关的或特定于实例的错误
- Http头介绍:Expires,Cache-Control,Last-Modified,ETag
- http