接下来,总结传输层的两大协议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的等待时间。  

  

            

TCP/IP知识总结(TCP/IP协议族读书笔记三)的更多相关文章

  1. TCP/IP知识总结(TCP/IP协议族读书笔记二)

    接下来,总结一下网络层的协议,IP,ARP,RARP,ICMP,IGMP.当我们在网络传输的过程中,把分组交付到主机或路由器需要两级地址:物理地址和逻辑地址.而且我们需要能够把物理地址映射成为相应的逻 ...

  2. TCP/IP知识总结(TCP/IP协议族读书笔记一)

    一.简述TCP/IP协议 Transmission Control Protocol/Internet Protocol的简写,即传输控制协议/互联网互联协议,又名网络通信协议.是Internet最基 ...

  3. 『TCP/IP详解——卷一:协议』读书笔记——01

    从今日起开始认真研读TCP/IP详解这本经典制作,一是巩固我薄弱的计算机网络知识,二来提高我的假期的时间利用率.将心得与思考记录下来,防止白看-哦耶 2013-08-14 18:47:06 第一章 概 ...

  4. 『TCP/IP详解——卷一:协议』读书笔记——07

    2013-08-20 17:51:49 第三章 IP:网际协议 3.1 引言 IP是TCP/IP协议族中最为核心的协议.所有的TCP.UDP.ICMP和IGMP数据都以IP数据报格式传输.再来看一下图 ...

  5. 『TCP/IP详解——卷一:协议』读书笔记——06

    2013-08-20 14:41:01 2.8 最大传输单元MTU MTU,最大传输单元:以太网和802.3对数据帧的长度都有一个限制,其最大值分别是1500和1492字节.这个不同网络对应的传输上限 ...

  6. 『TCP/IP详解——卷一:协议』读书笔记——03

    2013-08-17 17:31:49 1.7 分用 分用(Demultiplexing):这是一个过程——当目的主机收到一个以太网数据帧时,数据就开始从协议栈中由底向上升,同时去掉各层协议上的报文首 ...

  7. 《TCP/IP详解 卷1:协议》读书笔记

    第一章 概述 协议栈 应用层 HTTP,FTP   运输层 TCP, UDP 段(Segment) 网络层 IP, ICMP, IGMP 数据报(Datagram) 链路层   帧(Frame) 物理 ...

  8. 『TCP/IP详解——卷一:协议』读书笔记——17

    2013-08-27 15:37:42 6.5 ICMP端口不可达差错 端口不可达报文是ICMP差错报文的一种,它是ICMP不可达报文中的一种,以此来看一看ICMP差错报文中所附加的信息.使用UDP来 ...

  9. 『TCP/IP详解——卷一:协议』读书笔记——15

    2013-08-25 13:39:40 第6章 ICMP:Internet控制报文协议 6.1 引言 ICMP经常被认为是IP层的一个组成部分.它传递差错报文以及其他需要注意的信息.ICMP报文同通常 ...

随机推荐

  1. SpringCloud初体验:五、Sidecar 将 PHP 这类非 Java 生态语言的服务接入 Spring Cloud

    先起一个 Sidecar 服务,一个PHP服务一个应用,和PHP服务部署在同一台机子,通过 localhost 访问,这样就解决了网络开销,相当于本地进程间调用 Sidecar 服务比较简单, 1.这 ...

  2. MySQL集群Percona XtraDB Cluster安装搭建步骤详解

    http://www.linuxidc.com/Linux/2017-05/143501.htm http://blog.csdn.net/thundermeng/article/details/52 ...

  3. win7/win8/win10 php5.6 redis扩展(适用于iis/nginx/apache),亲测

    win7 php5.6 redis扩展   步骤: 1.下载redis扩展 redis扩展下载地址:http://windows.php.net/downloads/pecl/snaps/redis/ ...

  4. jenkins 执行python脚本 断言失败就可以构建失败

    可以配合try: 那个语句去搭配

  5. HTTP Status 500 - The absolute uri: http://java.sun.com/jsp/jstl/core cannot-报错解决方法

    操作:jsp文件里面添加<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"   % ...

  6. [转]利用C#自带组件强壮程序日志

    利用C#自带组件强壮程序日志   在项目正式上线后,如果出现错误,异常,崩溃等情况 我们往往第一想到的事就是查看日志 所以日志对于一个系统的维护是非常重要的 声明 正文中的代码只是一个栗子,一个非常简 ...

  7. [UE4]GetWorld()->GetDeltaSeconds()方法

    void AAvatar::Yaw(float amount) { if (Controller && amount) { // AddControllerYawInput()函数用于 ...

  8. width:100%和width:auto区别

    在div父元素是body时 1.先看没有width限制的div <div style="border:1px solid red; margin-left:50px; margin-r ...

  9. Windows环境下多版本JDK切换

    因为有切换多个版本的JDK需求,但是本机的JDK安装比较混乱(因为不是我最先使用的),所以出现了一些问题在这里记录下.本来我以为只需要修改环境变量中的JAVA_HOME环境路径即可,如果没有配置JAV ...

  10. php 流程控制switch实例

    switch允许对一个标量(表达式)的多个可能结果做选择. 语法: switch (expr) { case result1: statement1 break; case result2: stat ...