TCP及UDP协议

按照网络的五层分级结构来看,TCP及UDP位于运输层,故TCP及UDP是运输层协议。
TCP协议--传输控制协议
UDP协议--用户数据报协议

多路复用及多路分解

图多路复用及多路分解
接受主机中的运输层实际上并没有直接将数据交给进程,而是通过一个中间的套接字来传递。由于在任何一个时刻接受主机上可能有多个套接字,所以每个套接字都已一个唯一的标识符。

主机如何将一个收到的运输层报文段定向到合适的套接字?
为达到这一目的,在每个运输层报文段中设置了几个字段,在接收端,运输层检查并标识出接受套接字,然后将报文段定向到该套接字。
从而: 将运输层报文段中的数据交付到正确的套接字的工作叫做多路分解
从源主机的不同套接字中手机数据块,并为每个数据块封装首部信息从而生成报文段,然后将报文段传递到网络层的工作叫做多路复用

UDP协议

由RFC 768定义的UDP除了多路复用/多路分解功能及一些轻型的差错检测外,几部没对IP增加别的东西。
UDP被称为无连接的,不可靠数据传输

UDP报文段结构

  首部只有四个字段,每个字段两个字节
  源端口号、目的端口号:通过端口号可以使目的主机将应用数据交给运行在目的端系统中的相应进程
  检验和:接收主机使用检验和来检查报文段中是否存在差错
  长度:指明包括首部在内的UDP报文段的长度(以字节为单位)

UDP检验和

发送方的UDP对报文段的所有16比特字的和进行反码运算,求和时遇到任何语出都被回卷。得到的结果放在UDP报文段中的检验和字段。
例:假设报文段中有3个16比特字:
0110011001100000
0101010101010101
1000111100001100
前两个16比特字之和:
0110011001100000
0101010101010101
---------------------------
1011101110110101
再将上面的和与第三个字相加,得到:
1011101110110101
1000111100001100
---------------------------
0100101011000010
最后一次加法有溢出,这要被回卷(将溢出的1放到最后位继续加)。
反码:0变1,1变0
1011010100111101
此时就是检验和
在接收方,全部的4个16比特字包括检验和,一起相加。如果分组中无差错,接收方这个和将是
1111111111111111
如果其中有0那么我们就知道分组中出了差错

TCP协议

TCP协议是一个可靠数据传输协议,面向连接

进程间利用网络通信的过程中,如果数据传输的通道是一个可靠信道,即在数据在传输过程中不会产生丢失及损耗,那么进程间通信是完全可靠的。但是在实际的应用中,数据传输的通道是不可靠的,所以会产生数据的丢失等问题,为了解决这个问题,就产生了可靠数据传输协议,通过协议的方式来实现数据的可靠传输。

TCP连接在两个进程“握手”猴将连接状态完全保留在两个端系统中,TCP协议只在端系统中运行,而不再中间网络元素中运行,所以中间要素并不会维持TCP的连接状态。

TCP报文结构

  源端口号和目的端口号同UDP
  序号字段:32比特的
  确认号字段:32比特 序号字段和确认号字段用于实现可靠的数据传输
  接收窗口:16比特 用于流量控制
  首部长度字段 32比特字为单位的TCP首部长度
  可选与变长的选项字段 发送方与接收方协商最大报文段长度
  标志字段 ACK比特--用于指示确认字段中的值有效的
  RST、SYN和FIN比特用于连接建立和拆除
  PSH比特被设置时,指示接收方应立即将数据交给上层
  URG比特用来指示报文段里存着被发送方的上层实体置为“紧急”的数据

序号和确认号

TCP把数据看成一个无结构的但是有序的字节流。序号建立在传送的字节流上,而不是建立在传送的报文段的序列之上。一个报文段的序号因此是该报文段首字节的字节流编号。
例:主机A上的一个进程想通过一条TCP连接向主机B上的一个进程发送一个数据流。A中的TCP将隐式的对数据流中的每一个字节进行编号。假定数据流由一个包含500000字节的文件组成,MSS为1000字节,数据流的首字节编号是0。TCP将该数据流构建500个报文段。第一个报文段的序号被赋为0,第二个报文段的序号被赋为1000,第三个报文段的序号被赋为2000,以此类推。每一个序号被填入到相应TCP报文段首部的序号字段中。
确认号字段。
TCP是全双工的,因此主机A也许在向主机B发送数据的同时,也接收来自主机B的数据。
从主机B到达的每个报文段中都有一个序号用于从B流向A的数据。主机A填充进报文段的确认号是主机A期望从主机B收到的下一个字节的序号。

客户机TCP与服务器TCP通信的过程:

建立连接的三次握手:

第一步:客户机端的TCP首先向服务器端的TCP发送一个特殊的TCP报文段。该报文段中不包含应用层数据,但是报文段的首部中的一个标志位(SYN比特)被置为1。另外,客户机会选择一个起始序号(client_isn),并将其放置到该起始的TCP SYN报文段的序号字段中。该报文段会被封装在一个IP数据报中,并发送给服务器。
第二步:一旦包含TCP SYN报文段的IP数据到达服务器主机(假定到达),服务器会从该数据报中提取出TCP SYN报文段,为该TCP连接分配TCP缓存和变量,并向客户机TCP发送允许连接的报文段。这个允许连接的报文段也不包含应用层数据。但是报文段的首部却包含了3个重要的信息。首先,SYN比特被置为1.其次该TCP报文段首部的确认号字段被置为client_isn+1.最后服务器选择自己的初始序号(server——isn),并将其放置到TCP报文段首部的序号字段中。
第三步:在收到SYN ACK报文段后,客户机也要给该连接分配缓存和变量。客户机主机还会向服务器发送另一个报文段,这个报文段对服务器的允许连接的报文段进行了确认(客户机通过将值server_isn+1放置到TCP报文段首部的确认字段中来完成此项工作)因为连接已经建立,所以该SYN比特被置为0。

数据传输:

数据传输的过程中SYN都会被置为0

断开连接的四次挥手:

参与TCP连接的两方都可以终止连接。
假设客户机打算关闭连接,客户机应用进程发出一个关闭连接命令。这会引起客户机TCP向服务器进程发送一个特殊的TCP报文段。这个特殊的报文段首部中的一个标志比特,即FIN比特被设置为1。当服务器收到该报文段后,就向客户机会送一个确认报文段。然后服务器发送其终止报文段,其FIN比特被置为1.最后,该客户机对这个服务器的终止报文进行确认。此时,两台主机商用与该连接的所有资源都被释放。

运输层协议--TCP及UDP协议的更多相关文章

  1. 网络编程协议(TCP和UDP协议,黏包问题)以及socketserver模块

    网络编程协议 1.osi七层模型 应用层  表示层  会话层  传输层  网络层  数据链路层  物理层 2.套接字 socket 有两类,一种基于文件类型,一种基于网络类型 3.Tcp和udp协议 ...

  2. 网络编程协议(TCP和UDP协议,粘包问题)以及socketserver模块

    网络编程协议 1.osi七层模型 应用层  表示层  会话层  传输层  网络层  数据链路层  物理层 2.套接字 socket 有两类,一种基于文件类型,一种基于网络类型 3.Tcp和udp协议 ...

  3. 运输层协议TCP和UDP

    运输层协议TCP和UDP 一.用户数据报协议 UDP 1.1.UDP 概述 UDP 只在 IP 的数据报服务之上增加了很少一点的功能,即端口的功能和差错检测的功能. 虽然 UDP 用户数据报只能提供不 ...

  4. 面试:TCP和UDP协议

    目录 TCP 协议 UDP协议 TCP和UDP的区别 TCP和UDP的使用场景 一 TCP协议 1.TCP的头部格式 理解TCP协议,首要的就是TCP协议的头部格式 ·        Source P ...

  5. TCP和UDP 协议发送数据包的大小

    在进行UDP编程的时候,我们最容易想到的问题就是,一次发送多少bytes好? 当然,这个没有唯一答案,相对于不同的系统,不同的要求,其得到的答案是不一样的,这里仅对像ICQ一类的发送聊天消息的情况作分 ...

  6. 软件开发架构,网络编程简介,OSI七层协议,TCP和UDP协议

    软件开发架构 什么是软件开发架构 1.软件架构是一个系统的草图. 2.软件架构描述的对象是直接构成系统的抽象组件. 3.各个组件之间的连接则明确和相对细致地描述组件之间的通讯. 4.在实现阶段,这些抽 ...

  7. 传输层协议TCP和UDP

    本文力图简洁,让读者对TCP和UDP有个初步的认知.闲话少说,现在开始吧.TCP和UDP都是传输层的协议.TCP通过三次握手建立可靠连接,对未送达的消息重新进行发送.UDP不建立连接而直接发送,对未送 ...

  8. TCP与UDP协议

    传输控制协议(Transmission Control Protocol, TCP)和用户数据报协议(User Datagram Protocol, UDP)是典型的传输层协议. 传输层协议基于网络层 ...

  9. TCP和UDP协议的区别

    TCP和UDP都是传输层的协议 UDP协议的特点: UDP协议是一种无连接的.不可靠的传输层协议(尽力而为的协议) 为什么说UDP是一种无连接.不可靠的协议呢?UDP协议在传输报文之前不需要在双方之间 ...

随机推荐

  1. LandMVC HttpHandler web.config配置

    <system.webServer> <validation validateIntegratedModeConfiguration="false" /> ...

  2. Loadrunner_http长连接设置

    最近协助同事解决了几个问题,也对loadrunner的一些设置加深了理解,关键是更加知其所以然. ljonathan http://www.51testing.com/html/48/202848-2 ...

  3. 对Python线程池

    本文对Python线程池进行详细说明介绍,IDE选择及编码的解决方案进行了一番详细的描述,实为Python初学者必读的Python学习经验心得. AD: 干货来了,不要等!WOT2015 北京站演讲P ...

  4. unity发射弓箭轨迹的实现

    无论是愤怒的小鸟,还是弓箭发射功能,亦或者模拟炮弹受重力影响等抛物线轨迹,都可以使用本文的方法,模拟绝对真实. 和往常一样,先说原理.就是抛物运动,在垂直方向上做加速度运动,在水平方向上,做匀速运动. ...

  5. 如何隐藏js

    前端好像一直会遇到js容易被查看的问题,针对这种情况,如何隐藏js呢? 突发奇想,想到一个办法,如果说一段js只需要执行一次的话 可以尝试在所有js加载操作完毕后把它去掉.看代码 <!DOCTY ...

  6. nginx 服务器重启命令,关闭(转)

    nginx -s reload  :修改配置后重新加载生效 nginx -s reopen  :重新打开日志文件nginx -t -c /path/to/nginx.conf 测试nginx配置文件是 ...

  7. 微软向开源又迈进了一大步:Checked C

    导读 微软开源了 Checked C ,这是一个 C 语言的扩展版本,可以用于解决 C 语言中的一系列安全相关的隐患.正如其名字所示,Checked C 为 C 语言增加了检查,这个检查可以帮助开发者 ...

  8. LAMP集群项目五 部署NFS存储服务并设置WEB服务挂载

    yum install nfs-utils portmap -y 在centos6.5中portmap已经改为rpcbind 先启动rpcbind /etc/init.d/rpcbind start ...

  9. win7卸载IE11

    好多人升级了IE11后发现各种不好用,比如经常卡死,无响应.调试工具不好用等缺点. 现在告诉你如何卸载IE11 查看已安装的更新 右键wie卸载,即可需要重启

  10. Struts2中的拦截器详解

    exception:异常拦截器,拦截异常aliasservletConfig18nprepare:预备拦截器,这个拦截器就是为了ModelDriven准备对象的,若Action类实现了preparab ...