运输层协议--TCP及UDP协议
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协议的更多相关文章
- 网络编程协议(TCP和UDP协议,黏包问题)以及socketserver模块
网络编程协议 1.osi七层模型 应用层 表示层 会话层 传输层 网络层 数据链路层 物理层 2.套接字 socket 有两类,一种基于文件类型,一种基于网络类型 3.Tcp和udp协议 ...
- 网络编程协议(TCP和UDP协议,粘包问题)以及socketserver模块
网络编程协议 1.osi七层模型 应用层 表示层 会话层 传输层 网络层 数据链路层 物理层 2.套接字 socket 有两类,一种基于文件类型,一种基于网络类型 3.Tcp和udp协议 ...
- 运输层协议TCP和UDP
运输层协议TCP和UDP 一.用户数据报协议 UDP 1.1.UDP 概述 UDP 只在 IP 的数据报服务之上增加了很少一点的功能,即端口的功能和差错检测的功能. 虽然 UDP 用户数据报只能提供不 ...
- 面试:TCP和UDP协议
目录 TCP 协议 UDP协议 TCP和UDP的区别 TCP和UDP的使用场景 一 TCP协议 1.TCP的头部格式 理解TCP协议,首要的就是TCP协议的头部格式 · Source P ...
- TCP和UDP 协议发送数据包的大小
在进行UDP编程的时候,我们最容易想到的问题就是,一次发送多少bytes好? 当然,这个没有唯一答案,相对于不同的系统,不同的要求,其得到的答案是不一样的,这里仅对像ICQ一类的发送聊天消息的情况作分 ...
- 软件开发架构,网络编程简介,OSI七层协议,TCP和UDP协议
软件开发架构 什么是软件开发架构 1.软件架构是一个系统的草图. 2.软件架构描述的对象是直接构成系统的抽象组件. 3.各个组件之间的连接则明确和相对细致地描述组件之间的通讯. 4.在实现阶段,这些抽 ...
- 传输层协议TCP和UDP
本文力图简洁,让读者对TCP和UDP有个初步的认知.闲话少说,现在开始吧.TCP和UDP都是传输层的协议.TCP通过三次握手建立可靠连接,对未送达的消息重新进行发送.UDP不建立连接而直接发送,对未送 ...
- TCP与UDP协议
传输控制协议(Transmission Control Protocol, TCP)和用户数据报协议(User Datagram Protocol, UDP)是典型的传输层协议. 传输层协议基于网络层 ...
- TCP和UDP协议的区别
TCP和UDP都是传输层的协议 UDP协议的特点: UDP协议是一种无连接的.不可靠的传输层协议(尽力而为的协议) 为什么说UDP是一种无连接.不可靠的协议呢?UDP协议在传输报文之前不需要在双方之间 ...
随机推荐
- 剑指 offer set 13 把数组排成最小的数
总结 1. 给定 3, 32, 321 将他们组合成最小的数, 比如 321323 2. 3 -> 333 32 -> 322 321 -> 321 然后再排序
- WPF进阶之接口(2):IDisposable,ICollectionView
废话不多说,进入正题,先来说说IDisposable,看例子(来自MSDN): using System; using System.ComponentModel; // 下面的例子将展示一个实施了I ...
- THINKPHP5加载公共头部尾部模板方法
之前在3.2中用 <include file="public/header" /> 后来发现在thinkphp5中应该这样写才行 {include file=" ...
- windows环境通过cmd命令到ftp上下载文件到linux服务器
转自:http://jingyan.baidu.com/article/6525d4b1300912ac7d2e941b.html
- 自动交互式脚本--expect
我们经常会遇到一些需要与服务器程序打交道的场景,比如,从登陆某个服务器,然后进行某项工作.这很平常,但是如果把这个工作自动化进行,你就需要一个程序能自动做你要告诉机器的事情,这样,我们的expect就 ...
- MySQL中关于SQL注入的相关需要的基础知识
零.绪论: 文章部分整理来源于公司同事,特此鸣谢!!! 一.关于注入点在KEY上的注入: 我们来看一个查询,你的第一个字段是过滤器(filter)第二个字段是查询的关键字,例如查询ip == 1.2. ...
- pdb文件及引发的思考
最初只想知道线上iis里需要不需要pdb文件,了解部分之后对于.net底层产生了浓厚的兴趣,看了一点点资料 资料来源: https://www.cnblogs.com/itech/archive/20 ...
- ios 对日期的处理(包括计算昨天时间、明天时间)
NSDate存储的是世界标准时(UTC),输出时需要根据时区转换为本地时间 Dates NSDate类提供了创建date,比较date以及计算两个date之间间隔的功能.Date对象是不可改变的. 如 ...
- 单反手动对焦M档,AV,TV,P,A,A-DEP
今天科普一下单反相机的自动对焦设置,以佳能EOS600为例,在镜头的后方会看到一个af,mf的开关.af为auto focus的缩写,自动对焦.mf为手动对焦 自动曝光模式的种类: AV:光圈优先自动 ...
- python--sha256
import hmacimport hashlib def get_hmacsha256(key, message): key_bytes = bytes(key, 'utf-8') message_ ...