TCP/IP和OSI传输层

一、传输层协议:
  1.TCP 可靠传输
    面向连接:数据传输之前需要先建立连接,传输成本相对较高,通过重传机制实现数据纠错,具备流控制功能。
    什么是流控制:就是主机1给主机2发送数据的过程中,可能一次发送的数据量较大,那么主机2告诉主机1,自己的缓冲区没有足够的能力一次处理这么多数据,那么下一次发送数据的时候,主机1发送的数据量就相应的减少
  2.UDP 不可靠传输
    无连接:不需要事先建立连接,传输成本相对较低

  两种传输有各自的应用领域

二、TCP和UDP包头的对比

  

  从图中可以看出TCP包头是20字节,UDP包头是8字节,TCP的字段比UDP的字段多一些

  TCP是通过确认机制(acknowledgement number)和序列号(sequence number)来保证数据传输的可靠性,在UDP里面没有这两个字段。

  TCP和UDP都有校验和字段(checksum),错误检测能力。但是UDP没有确认机制和序列号,所以它没有数据纠错(数据重传)能力。

三、完整的TCP包头信息

  

  1.两个16bit的端口号,分别是源端口、目标端口

    不同的端口号代表了不同的应用,类似于电视的频道,通过端口号可以判断上层的应用是什么,例如80,上层就是http服务

    知名端口:0-1023

    非知名端口:1024-65535

  2.32位的序列号

  3.32位的确认号

    2和3来保证tcp传输的可靠性

    确认号有两个作用,第一用于确认,第二用于表示这是一个请求,还有一个作用就是通知请求方,下一次发送信息过来的时候,包头里的 序列号 应该从这个数字开始。

  4.4bit的包头信息-保留字段-代码位,其中代码位包含了一些比较复杂的信息

    前面说TCP传输可靠,那么它的可靠性是如何保障的,在这里分析一下(TCP三次握手)。

    图中的信息比较复杂,其中小框框里的东西叫代码位,不同的代码位有不同的作用,下面看看三次握手的具体过程,假设是 a 主机和 b 主机进行通信。

    a) a主机首先设置自己的 syn=1(表示同步请求) ,sequence number=100(随机数,这里假设序列号是100),CTL=SYN(代码位整体表现为SYN),把包头发给主机b,(000000010),第一次握手完毕。

    b) b主机收到信息后,为了表明自己已经收到请求,那么b主机要给a主机做出响应,那么b主机把自己的包头信息设置为这样: syn=1(b给a发信息也相当于一次请求,所以把自己的请求信息设置为1),小ack=1(syn和ack都为1,表示对a主机请求的确认),sequence number=300(同上),acknowledgement number=101(确认号设置为101,这里不是随机数,是a主机序发送的序列号+1,详见上面的第三步),CTL=SYN.ACK(代码位整体表现为SYN和ACK), 把这些设置好的包头信息发送给主机a,第二次握手完成。

    c) 主机b如何知道自己设置好的响应信息发送到了主机a,所以还需要第三次握手, 这时候主机a为了表明自己受到了主机b的响应,把自己包头设置为syn=0(之前已经发过同步请求,此时不再不再需要发送同步请求了),sequence number=101(从两方面判定,1:上次发送的序列号为100,这次就是101, 2:b主机要求本次的序列号是101),CTL=ACK(代码位表现为ACK),发送给主机b,第三次握手完成。

    一旦建立连接之后,每次通信的时候,代码位的ack都是1,表示以后接收方收到tcp信息都要进行确认,保证tcp传输的可靠性,如果不进行确认,那就违背了tcp传输的可靠性。

  5.16bit的窗口大小

    接第四步,建立连接之后 ack被设置为1,那么每次通信都需要确认,那么交互非常频繁,接收方每次收到数据都要告诉请求方,进行确认 来保证数据的完整新。

    通常情况下,窗口大小为1,表明发送一个请求,响应一次(固定窗口),现在把窗口大小设置为3,收到三次的数据,再回答一次。

    意外:如果接收方的缓冲区不足,不能一次容纳请求方的3次请求的数据量,这时候接收方会把自己的窗口大小下降为2,并且让发送方从丢失的那个包重新发送数据。

  6.16bit的校验和

  7.16bit的紧急指针

  8.可选项

  9.封装的上层数据

四、TCP连接的关闭

  1.正常关闭

    主机a和主机b通信完成后,需要正常关闭连接

      1.主机a发送一个代码位fin=1的包头到b主机。

      2.主机b收到后,向a主机发送一个代码位ack=0的响应,表示认可/同意a的关闭请求。(前面完成三次握手后,ack一直保持为1)

      3.主机b同时在发送一个代码位fin=1的包头到主机a

      4.主机a发送确认关闭会话的请求到主机b,完成关闭连接

  2.非正常关闭

      当收到代码位rst=1的包头的时候,主机会立马重置tcp连接。

五、保持存活

  当两台主机建立连接后,如果在短暂的时间内不进行数据传输,连接不回立马被断开,TCP通过keepalive信息保持TCP连接的维持。

  这个在我们b/s开发中最常见到,例如请求一个网址之后,用firebug就能看到很多个连接信息, 以前总听说HTTP/1.1使用的是长连接,效率较高,听的云里雾里的,现在终于明白了。因为它不回每次请求都关闭连接嘛,效率自然是高了。同时也可以看到请求头信息中有一行为:Connection: keep-alive.

六、总结

  看来动手学学还是很有必要的,以前看过很多人写的tcp三次握手、四次挥手 感觉很高上大,可自己就是看不懂,非常恼火。现在终于通过自己查找资料明白了其中的原理。

  记得有一次去一个特别大的公司面试,老汉说就问一个问题:在浏览器中输入一个网址回车,看到网页信息后,这中间都做了些什么? 当时就楞了 不知道说什么, 后来自己也查过资料 可其中有些步骤就是看不懂。现在对整个过程中的这一小环节终于有所了解了。

  这个系列的资料比较长,还得静下心来,慢慢学习。

  感谢无私奉献的前辈们贡献的资料。

时间: 2024-11-05 02:13:37

TCP/IP和OSI传输层的相关文章

TCP/IP中的传输层协议TCP、UDP

TCP提供可靠的通信传输,而UDP则常用于让广播和细节控制交给应用的通信传输. 传输层协议根据IP数据报判断最终的接收端应用程序. TCP/IP的众多应用协议大多以客户端/服务端的形式运行.客户端是请求的发起端,而服务端表示提供服务的意思,是请求的处理端.因此,作为服务端的程序有必要提前启动,准备接收客户端的请求.传输协议根据接收数据中的目标端口号识别目标处理程序. TCP.UDP比较 TCP提供可靠性传输.实行顺序控制或重发控制机制,还有流量控制和拥塞控制,提高网络利用率. UDP是不具备可靠

TCP/IP入门(3) --传输层

原文:http://blog.csdn.net/zjf280441589/article/category/1854365 传输层的主要功能 1)传输层为应用进程之间提供端到端的逻辑通信(网络层是为主机到主机提供逻辑通信). 2)复用和分用: 复用是指发送方不同的应用进程都可以使用同一个传输层协议传送数据; 分用是指接收方的传输层在剥去报文的首部之后能够把这些数据正确交付到目的应用进程. 3)传输层还会对收到的报文进行差错检测(首部和数据部分), 而网络层只检查IP数据报的首部, 不检验数据部分

TCP/IP(三):传输层TCP与UDP

TCP协议 概述 TCP协议和UDP协议处于同一层:传输层,但是两者之间有很大的区别,TCP协议具有以下特点: TCP提供可靠的数据传输服务,TCP是面向连接的,即数据在通信之间要先建立连接,结束通信时要释放连接,这也是后面所说的3次握手,4次挥手: TCP是点对点的连接方式,即一条TCP连接两端只能是两个端点: TCP提供可靠的,无差错的,不丢失,不重复,按顺序的服务: TCP提供全双工通信,允许通信双方任何时候都能发送数据,TCP在连接的两端都设置有发送缓存和接收缓存: TCP是面向字节流的

TCP/IP 协议图--传输层中的 TCP 和 UDP

TCP/IP 中有两个具有代表性的传输层协议,分别是 TCP 和 UDP. TCP 是面向连接的.可靠的流协议.流就是指不间断的数据结构,当应用程序采用 TCP 发送消息时,虽然可以保证发送的顺序,但还是犹如没有任何间隔的数据流发送给接收端.TCP 为提供可靠性传输,实行"顺序控制"或"重发控制"机制.此外还具备"流控制(流量控制)"."拥塞控制".提高网络利用率等众多功能. UDP 是不具有可靠性的数据报协议.细微的处理它会

linux OSI七层模型、TCP/IP协议栈及每层结构大揭秘

学习Linux,就算是像小编我这样的小萌新,也知道OSI模型.什么?!你不知道!!! 好吧,这篇秘籍拿走,不谢~~~ 一.两个协议 (1)OSI 协议模型(7层)国际协议    PDU:协议数据单元对等层次之间传递的数据单位 OSI协议(7层) 国际协议 PDU 单位 功能 实例 7   应用层 application message 为应用程序进程(例:mail.终端防伪)提供网络服务:提供用户访问界面 提供用户身份验证 HTTP Telnet 6   表示层 presention messa

TCP/IP与OSI

最近在阅读TCP/IP方面的东西,下面是一些简单的总结介绍,首先介绍一些概念: TCP/IP协议模型:TCP/IP模型是一系列网络协议的总称,这些协议的目的,就是使计算机之间可以进行信息交换.所谓"协议"可以理解成机器之间交谈的语言,每一种协议都有自己的目的.TCP/IP模型一共包括几百种协议,对互联网上交换信息的各个方面都做了规定.TCP/IP协议与OSI相对应 互联网地址(IP):网络上每一个节点都必须有一个独立的Internet地址(也叫做IP地址),IP地址是网络号+主机号的组

5.CCNA第五天-TCP/IP协议栈的互联网层

TCP/IP协议栈的互联网层 IP  internet prootocol 互联网协议 工作在网络层 为网络层提供逻辑地址服务 MAC地址,仅仅能够在同一广播域内,为主机提供数据转发服务 IP地址: 实现跨越广播域的数据转发 无连接协议 能够独立的处理报文 具有结构化的编址方案 (分为私有地址.共有地址.单播地址.组播地址.广播地址.特殊地址) 尽力而为的转发(平信)  VS  可靠的转发(EMS) 通常来讲,可靠的转发,由上层协议实现 没有数据恢复能力,当然,有些上层协议是有数据恢复功能的 与

学习笔记之TCP/IP协议的传输方式

一.通过网络发送数据,大致可以分为面向有连接与面向无连接两种类型: 1.面向无连接型包括以太网. IP.UDP等协议. 2. 面向有连接 型包括ATM.帧中继.TCP等 协议. 通过一张图了解一下: 面向有连接型 面向有连接型中,在发送数据之前,需要在收发主机之间连接一条通信线路 面向有连接型就好比人们平常打电话,输入完对方电话号码拨出之后,只有 对端拿起电话才能真正通话,通话结束后将电话机扣上就如同切断电源.因此在 面向有连接的方式下,必须在通信传输前后,专门进行建立和断开连接的处理.如果与对

[HTTP] tcp/ip详解 链路层 网络层 传输层 应用层

1.可以把七层协议简化成四层协议链路层 网络层 传输层 应用层 2.通过路由器连接的两个网络网络层ip提供的是一个逐跳协议,提供了一种不可靠的服务,中间有可能会丢传输层tcp在ip的基础上提供了可靠的传输层 比喻:tcp就是淘宝卖家 ,ip就是包裹,中间如果包裹丢了,卖家会重新发一个包裹,这里会有一个确认的过程3.udp是不可靠的,它不会去确认,丢了就丢了,比如语音就用这个,syslog也用这个 4.icmp这个附属协议,ping就是用的这个 5.封装,每一层都会留下自己的标记,从应用层开始加个