问题开始于 在网上看到DNS会使用UDP和TCP的43号端口,一时没理解TCP和UDP两种协议与端口的关系。 端口只是传输层的概念。传输层协议除了tcp udp 还有其他的如netbios,spx等。网络层也不只是IP协议还有ipx等。与IP协议配套使用实现其功能的还有地址解析协议ARP、逆地址解析协议RARP、因特网报文协议ICMP(ping命令用到它)、因特网组管理协议IGMP。
维基百科 https://en.wikipedia.org/wiki/Port_(computer_networking)
In the internet protocol suite, a port is an endpoint of communication in anoperating system. While the term is also used for hardware devices, in software it is a logical construct that identifies a specificprocess or a type of network service.
A port is always associated with an IP address of a host and the protocol type of the communication, and thus completes the destination or origination address of a communication session. A port is identified for each address and protocol by a 16-bit number, commonly known as theport number.
Specific port numbers are often used to identify specific services. Of the thousands of enumerated ports, 1024well-known port numbers are reserved by convention to identify specific service types on a host. In theclient–server model of application architecture, the ports that network clients connect to for service initiation provide amultiplexing service. After initial communication binds to the well-known port number, this port is freed by switching each instance of service requests to a dedicated, connection-specific port number, so that additional clients can be serviced. The protocols that primarily use ports are the transport layer protocols, such as the Transmission Control Protocol (TCP) and the User Datagram Protocol (UDP).专用端口和用于专用的服务,65535个端口中,1024个是保留的用语特殊服务的。在c/s模式的应用框架中,网络客户端为了初始化服务连接到 的端口提供多路复用服务。在初始通讯连接到well-known端口后,通过把每一个服务请求切换到专用的指定的端口,这个端口就可以被释放,其他客户端就可以被服务了。使用端口的协议主要是传输层协议比如tcp,udp.
Ports were unnecessary on direct point-to-point links when the computers at each end could only run one program at a time. Ports became necessary after computers became capable ofexecuting more than one program at a time and were connected to modern packet-switched networks. 端口是在电脑进化到能同时处理多个线程和接入到分组交换网后边的很有必要。
Details
Transport layer protocols, such as theTransmission Control Protocol (TCP) and the User Datagram Protocol (UDP), specify a source and destination port number in theirheaders. A port number is a 16-bit unsigned integer, thus ranging from 0 to 65535.[a] A process associates its input or output channels, via an Internet socket (a type of file descriptor), with a transport protocol, a port number, and an IP address. This process is known as binding, and enables sending and receiving data via the network. Theoperating system's networking software has the task of transmitting outgoing data from all application ports onto the network, and forwarding arriving network packets to processes by matching the packet's IP address and port number. Only one process may bind to a specific IP address and port combination using the same transport protocol. Common application failures, sometimes calledport conflicts, occur when multiple programs attempt to bind to the same port numbers on the same IP address using the same protocol.传输层协议如tcp,udp,在他们的协议头中指定源端口和目的端口。端口号是16bit的无符号整型数0~65535。进程关联其输入输出通道,通过网络socket,with传输协议,端口号和IP地址。这个过程称为绑定,并且可以通过网络发送和接收数据。操作系统的网络软件的任务包括传输从各个应用端口向外发送到网络的数据,并通过匹配数据包的IP地址和端口号转发到达的(arriving)网络数据包。只有一个进程可以绑定到一个specific IP地址和端口组合,使用相同的传输协议。常见的应用错误,比如端口冲突,发生在多个程序使用相同的协议尝试绑定同一个IP地址和端口。
Applications implementing common services often use specifically reserved well-known port numbers for receiving service requests from clients. This process is known aslistening, and involves the receipt of a request on the well-known port and establishing a one-to-one server-client dialog, using the same local port number. Other clients may continue to connect to the listening port; this works because a TCP connection is identified by a tuple consisting of the local address, the local port, the remote address, and the remote port.[1] The well-known ports are defined by convention overseen by the Internet Assigned Numbers Authority (IANA). The core network services, such as theWorld-Wide Web, typically use well-known port numbers. In many operating systems special privileges are required for applications to bind to these ports, because these are often deemed critical to the operation of IP networks. Conversely, the client end of a connection typically uses a high port number allocated for short term use, therefore called anephemeral port.实现公共服务的应用程序通常使用专门保留的知名端口号来接收来自客户端的服务请求。这个过程被称为侦听,并涉及在已知端口上接收请求并使用同一本地端口号建立一对一的服务器-客户端对话。其他客户可以继续连接到监听端口;这是因为TCP连接是 由本地地址、本地端口、远程地址和远程端口组成的元组(tuple) 来标识的。well-known端口是有IANA监督定义的。重要的网络服务比如www,就使用well-known端口。在许多操作系统中,应用想要绑定到这些端口需要特殊的权限,因为这些well-known端口被认为是对IP网操作非常重要的。相反的,连接的客户端一般使用分配给短期使用的较大端口号,所以称为临时端口。
The port numbers are encoded in the transport protocol packet header, and they can be readily interpreted not only by the sending and receiving computers, but also by other components of the networking infrastructure. In particular,firewalls are commonly configured to differentiate between packets based on their source or destination port numbers.Port forwarding is an example application of this.端口号被编码在传输协议的包头,并且可以方便的接受和发送的计算机以及网络基础设施中的其他组成部分。特别的,防火墙通常被配置为能够根据源端口或目的端口号来区分数据包。
The practice of attempting to connect to a range of ports in sequence on a single computer is commonly known asport scanning. This is usually associated either with malicious cracking attempts or with network administrators looking for possible vulnerabilities to help prevent such attacks. Port connection attempts are frequently monitored and logged by computers. The technique ofport knocking uses a series of port connections (knocks) from a client computer to enable a server connection.
Examples
An example for the use of ports is the Internet mail system. A server used for sending and receiving email generally needs two services. The first service is used to transport email to and from other servers. This is accomplished with theSimple Mail Transfer Protocol (SMTP). The SMTP service application usually listens on TCP port 25 for incoming requests. The second service is usually either thePost Office Protocol (POP) or the Internet Message Access Protocol (IMAP) which is used by e-mail client applications on users' personal computers to fetch email messages from the server. The POP service listens on TCP port number 110. Both services may be running on the same host computer, in which case the port number distinguishes the service that was requested by a remote computer, be it a user's computer or another mail server.
While the listening port number of a server is well defined (IANA calls these the well-known ports), the client's port number is often chosen from the dynamic port range (see below). In some applications, the clients and the server each use specific port numbers assigned by the IANA. A good example of this isDHCP in which the client always uses UDP port 68 and the server always uses UDP port 67.
http://bbs.51cto.com/thread-1010537-1.html
DNS的端口有TCP,UDP 53端口,那么什么时候用TCP,什么时候用UDP的端口的呢?
DNS同时占用UDP和TCP端口53是公认的,这种单个应用协议同时使用两种传输协议的情况在TCP/IP栈也算个另类。但很少有人知道DNS分别在什么情况下使用这两种协议。
先简单介绍下TCP与UDP。
TCP是一种面向连接的协议,提供可靠的数据传输,一般服务质量要求比较高的情况,使用这个协议。UDP---用户数据报协议,是一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。
TCP与UDP的区别:
UDP和TCP协议的主要区别是两者在如何实现信息的可靠传递方面不同。TCP协议中包含了专门的传递保证机制,当数据接收方收到发送方传来的信息时,会自动向发送方发出确认消息;发送方只有在接收到该确认消息之后才继续传送其它信息,否则将一直等待直到收到确认信息为止。与TCP不同,UDP协议并不提供数据传送的保证机制。如果在从发送方到接收方的传递过程中出现数据报的丢失,协议本身并不能做出任何检测或提示。因此,通常人们把UDP协议称为不可靠的传输协议。相对于TCP协议,UDP协议的另外一个不同之处在于如何接收突发性的多个数据报。不同于TCP,UDP并不能确保数据的发送和接收顺序。事实上,UDP协议的这种乱序性基本上很少出现,通常只会在网络非常拥挤的情况下才有可能发生。
既然UDP是一种不可靠的网络协议,那么还有什么使用价值或必要呢?其实不然,在有些情况下UDP协议可能会变得非常有用。因为UDP具有TCP所望尘莫及的速度优势。虽然TCP协议中植入了各种安全保障功能,但是在实际执行的过程中会占用大量的系统开销,无疑使速度受到严重的影响。反观UDP由于排除了信息可靠传递机制,将安全和排序等功能移交给上层应用来完成,极大降低了执行时间,使速度得到了保证。
DNS在进行区域传输的时候使用TCP协议,其它时候则使用UDP协议;
DNS的规范规定了2种类型的DNS服务器,一个叫主DNS服务器,一个叫辅助DNS服务器。在一个区中 主DNS服务器从自己本机的数据文件中读取该区的DNS数据信息,而辅助DNS服务器则从区的主DNS服务器中读取该区的DNS数据信息。当一个辅助DNS服务器启动时,它需要与主DNS服务器通信,并加载数据信息,这就叫做区传送(zone transfer)。
为什么既使用TCP又使用UDP?
首先了解一下TCP与UDP传送字节的长度限制:
UDP报文的最大长度为512字节,而TCP则允许报文长度超过512字节。当DNS查询超过512字节时,协议的TC标志出现删除标志,这时则使用TCP发送。通常传统的UDP报文一般不会大于512字节。
区域传送时使用TCP,主要有一下两点考虑:
1.辅域名服务器会定时(一般时3小时)向主域名服务器进行查询以便了解数据是否有变动。如有变动,则会执行一次区域传送,进行数据同步。区域传送将使用TCP而不是UDP,因为数据同步传送的数据量比一个请求和应答的数据量要多得多。
2.TCP是一种可靠的连接,保证了数据的准确性。
域名解析时使用UDP协议:
客户端向DNS服务器查询域名,一般返回的内容都不超过512字节,用UDP传输即可。不用经过TCP三次握手,这样DNS服务器负载更低,响应更快。虽然从理论上说,客户端也可以指定向DNS服务器查询的时候使用TCP,但事实上,很多DNS服务器进行配置的时候,仅支持UDP查询包。
如果用wireshark、sniffer或古老些的tcpdump抓包分析,会发现几乎所有的情况都是在使用UDP,使用TCP的情况非常罕见,神秘兮兮。其实当解析器发出一个request后,返回的response中的tc删节标志比特位被置1时,说明反馈报文因为超长而有删节。这是因为UDP的报文最大长度为512字节。解析器发现后,将使用TCP重发request,TCP允许报文长度超过512字节。既然TCP能将data stream分成多个segment,它就能用更多的segment来传送任意长度的数据。
另外一种情况是,当一个域的辅助域名服务器启动时,将从该域的主域名服务器primary DNS server执行区域传送。除此之外,辅域名服务器也会定时(一般时3小时)向PDS进行查询以便了解SOA的数据是否有变动。如有变动,也会执行一次区域传送。区域传送将使用TCP而不是UDP,因为传送的数据量比一个request或response多得多。
DNS主要还是使用UDP,解析器还是服务端都必须自己处理重传和超时。DNS往往需要跨越广域网或互联网,分组丢失率和往返时间的不确定性要更大些,这对于DNS客户端来说是个考验,好的重传和超时检测就显得更重要了。
http://forum.h3c.com/thread-95132-1-1.html 说说 IP协议号 和TCP 端口号,UDP端口号区别
协议号和端口号的区别:网络层-数据包的包格式里面有个很重要的字段叫做协议号。比如在传输层如果是tcp连接,那么在网络层ip包里面的协议号就将会有个值是6,如果是udp的话那个值就是17,协议号1代表ICMP,协议号2代表IGMP,GRE 47等等---传输层传输层--通过接口关联(端口的字段叫做端口)---应用层,详见RFC 1700 协议号是存在于IP数据报的首部的20字节的固定部分,占有8bit.该字段是指出此数据报所携带的是数据是使用何种协议,以便目的主机的IP层知道将数据部分上交给哪个处理过程。也就是协议字段告诉IP层应当如何交付数据。
而端口,则是运输层服务访问点TSAP{(TransportService Access Point)传输服务访问点,在计算机网络当中,传输层要在用户之间提供可靠和有效的端-端(如TSAP源端 -> TSAP目的端的传输选择)服务,必须把一个用户进程和其他的用户进程区分开,主要由传输地址来实现。
(目标用户需要这样的说明:用户标识、传输实体、主机地址和网络号码。)
这时,传输层需要定义一组传输地址,以供通信选用。传输地址用传输服务访问点(TSAP)来描述。
(为确保所有的传输地址在整个网络中是唯一的,传输地址规定由网络号、主机号以及主机分配的端口组成。)在层次地址构成中,一个实际的例子就是在Internet用<IP地址><端口号>表示TSAP。
比如在Telnet的TSAP是中IP地址,端口23),应用层的进程始终处于监听状态,其属于静态分配TSAP。}
端口的作用是让应用层的各种应用进程都能将其数据通过端口向下交付给运输层,以及让运输层知道应当将其报文段中的数据向上通过端口交付给应用层的进程。
端口号存在于UDP和TCP报文的首部,而IP数据报则是将UDP或者TCP报文做为其数据部分,再加上IP数据报首部,封装成IP数据报。而协议号则是存在这个IP数据报的首部.
比如,客户端发送一个数据包给ip,然后ip将进来的数据发送给传输协议(tcp或者udp),然后传输协议再根据数据包的第一个报头中的协议号和端口号来决定将此数据包给哪个应用程序(也叫网络服务)。也就是说,协议号+端口号 唯一的确定了接收数据包的网络进程。由于标志数据发送进程的'源端口号'和标志数据接受进程的'目的端口号'都包含在每个tcp段和udp段的第一个分组中,系统可以知道到底是哪个客户应用程序同哪个服务器应用程序在通讯,而不会将数据发送到别的进程中。
但是要注意的一点是同样的一个端口在不同的协议中的意义是不同的,比如tcp和udp中的端口31指的并不是同一个端口。但是对于同一个协议,端口号确实唯一的。
在端口中分为两种,一是'知名端口',也即小于256的端口号。另一种是'动态分配的端口',也就是在需要时再将其赋给特定的进程。这类似于nt服务器或者163拨号上网,也就是动态的分配给用户一个目前没有用到的标志。动态分配的端口号都是高于标准端口号范围的。网络服务常用的应用协议和对应的标准端口号
https://www.zhihu.com/question/20583641 车小胖计算机网络话题优秀回答者 网络主治大夫,专治疑难…
先来假设没有TCP,甚至没有IP层,只有MAC对应的数据链路层,HTTP等协议能跑多远?
直接把HTTP封装在Ethernet Frame 里,可以吗?当然可以,在同一个二层广播域里,通过MAC地址来识别对方,然后HTTP的数据通过网卡接口函数完成发送和接收。
那问题来了,如何保证数据万无一失地到达对方?让网卡来保证数据的可靠传输吗?网卡只对Ethernet 帧头做解释,以太网头14个字节也没有哪个字段可以胜任这个可靠传输的任务,那HTTP是不是要自己实现数据传输得可靠机制,比如发送一段1000字节的数据,要等待对方给自己确认收到,然后再来发送,这样是可以保证数据可靠传输。
同样FTP,STMP,POP3,BGP都是要保证数据可靠的传输,那他们是不是也要自己实现这些可靠的机制呢?那是一定,也就是说只要有一个应用,要可靠传输,必须由 application protocol 来实现!是不是很笨啊???这所有application protocol 的可靠传输机制是同样的实现,代码都应该类似,如果我们把这些被重用的代码封装起来,即接口函数API,让他实现数据的可靠传输,同时用一个标识符来表明这是哪个application protocol,是不是可行呢?可行!!!
这就是伟大TCP/IP协议的缔造者所高度抽象出来的东东:TCP!它把可靠传输机制代码封装成了接口函数API,即socket , 同时用TCP Port来辨别其服务的application Protocol。而application protocol 只需要对自己的协议本身和协议数据做解释,完成端对端的会话。
第二个问题:现在Ethernet + TCP + application protocol ,这个包能跑多远?也就是一个广播域那么大的范围了吧?yes,sir,小样再怎么得瑟也逃不出广播域的圈圈。IP层就是来解决这个问题的,有了IP层可以让Internet 成为可能,一句广告词:impossible is nothing! 要知道IP就是 Internet Protocol 的缩写。
那你可能要问了, 我想要IP层,不想要TCP层,直接把数据封装在IP层可以吗? 太可以了!不光可以,而且好多协议也是这么做的,OSPF,EIGRP,GRE,ESP,AH等协议都是这么做的,如果他们想保证可靠传输,他们自己用代码来实现,这当然可以。
问题是IP只用一个字节来表示协议号,理论上只能辨识255种上层协议,资源非常紧张,而且都被知名的大牌协议所霸占着,比如TCP,ICMP,IGMP,包括上面提到的,哪里轮的上你哦!为了解决这个资源紧张问题,于是就有了另外一个什么鸟事不干,只用来辨别application protocol 的小东西:UDP!
其实UDP除了提供一个Port来分辨application protocol, 确实没干点别的,但是Port号占用2个字节,理论上可以分辨65535种 application protocol,就这一条就可以让其功德圆满了,正是因为它不像TCP,是完全无状态协议,所以也深得一些应用程序的青睐,因为UDP无状态,IP也无状态,会话所有的状态都由application protocol 来进行控制,这也是一种选择。
另外UDP-based 的应用可以实现可靠传输,比如TFTP,那就由TFTP自己来实现可靠传输;也可以把数据交给UDP,让其发送出去即可,对发送出去的数据不需要确认,同学们会问:这是哪种应用啊?语音流量,丢了就丢了,对方听不见大不了再说一遍。
综上,TCP提供一种可靠传输机制,有状态;UDP提供一种更多的空间来辨别上层的协议,无状态。
百度百科:
运输协议
运输层(传输层),解决的是计算机程序到计算机程序之间的通信问题,即所谓的“端”到
“端”的通信。引入传输层的原因: 增加复用和分用的功能、 消除网络层的不可靠性、 提供从源端主机到目的端主机的可靠的、与实际使用的网络无关的信息传输。运输层是ISO/OSI的第四层,处于通信子网和资源子网之间,是整个协议层次中最核心的一层。它的作用是在优化网络服务的基础上,为源主机和目标主机之间提供可靠的价格合理的透明数据传输,使高层服务用户在相互通信时不必关心通信子网实现的细节。运输层的最终目标是为传送服务用户提供有效、可靠和价格合理的运输服务,而传送服务的用户即会话层实体。运输层是OSI七层模型中最重要最关键的一层,是唯一负责总体数据传输和控制的一层。运输层要达到两个主要目的:第一提供可靠的端到端的通信;第二,向会话层提供独立于网络的运输服务。 首先,运输层之上的会话层、表示层及应用层均不包含任何数据传输的功能,而网络层又不一定需要保证发送站的数据可靠地送至目的站;其次会话层不必考虑实际网络的结构、属性、连接方式等实现的细节。根据运输层在七层模型中的目的和地位,它的主要功能是对一个进行的对话或连接提供可靠的传输服务;在通向网络的单一物理连接上实现该连接的利用复用;在单一连接上进行端到端的序号及流量控制;进行端到端的差错控制及恢复;提供运输层的其它服务等。运输层反映并扩展了网络层子系统的服务功能,并通过运输层地址提供给高层用户传输数据的通信端口,使系统间高层资源的共享不必考虑数据通信方面的问题。
基本功能
提供端到端(进程-进程)的可靠通信,即向高层用户屏蔽通信子网的细节,提供
通用的传输接口。
1. 把传输地址映射为网络地址;2. 把端到端的传输连接复用到网络连接上;3. 传输连接管理;4. 端到端的顺序控制、差错检测及恢复、分段处理及QoS监测;5. 加速数据传送;6.将传输层的传输地址映射到网络层的网络地址;7. 将多路的端点到端点的传输连接变成一路网络连接;8. 传输连接的建立、释放和监控;9. 完成传输服务数据单元的传送;10. 端点到端点传输时的差错检验及对服务质量的监督。
TCP/IP的运输层中的两个协议
用户数据报协议UDP(UserDatagram Protocol):提供无连接服务;传输控制协议TCP(TransmissionControl Protocol):提供面向连接服务。UDP和TCP都使用IP协议。
1.UDP提供了不可靠的无连接传输服务。它使用IP携带报文,但增加了对给定主机上多个目标进行区别的能力。 UDP没有确认机制;不对报文排序;没有超时机制;没有反馈机制控制流量;使用UDP的应用程序要承担可靠性方面的全部工作。
2. 传输控制协议TCP(Tranmission Control Protocol)面向连接的、可靠的、端到端的、基于字节流的传输协议;TCP不支持多播(multicast)和广播(broadcast);TCP连接是基于字节流的,而非消息流,消息的边界在端到端的传输中不能得到保留;对于应用程序发来的数据,TCP可以立即发送,也可以缓存
一段时间以便一次发送更多的数据。为了强迫数据发送,可以使用PUSH标记;对于紧急数据(urgentdata),可以使用URGENT标记。
端口的概念
端口:用16位来表示,即一个主机共有65536个端口。序号小于256的端口称为通用端口,如FTP是21端口,WWW是80端口等。端口用来标识一个服务或应用。一台主机可以同时提供多个服务和建立多个连接。端口(port)就是传输层的应用程序接口。应用层的各个进程是通过相应的端口才能与运输实体进行交互。服务器一般都是通过人们所熟知的端口号来识别的。例如,对于每个TCP/IP实现来说,FTP服务器的TCP端口号都是21,每个Telnet服务器的TCP端口号都是23,每个TFTP(简单文件传输协议)服务器的UDP端口号都是69。任何TCP/IP实现所提供的服务都用众所周知的1-1023之间的端口号。这些人们所熟知的端口号由Internet端口号分配机构(Internet Assigned Numbers Authority, IANA)来管理。
用户数据报UDP的格式
用户数据报UDP包括两个字段:数据字段和首部字段。首部字段有8个字节,4个字段组成,每个字段两个字节。源端口字段: 源端口号;目的端口字段:目的端口号;长度字段:UDP数据报的长度;检验和字段:防止UDP数据报在传输中出错。伪首部:仅为计算检验和而构造。UDP通常作为IP的一个简单
扩展。它引入了一个进程端口的匹配机制,使得某用户进程发送的每个UDP报文都包含有报文目的端口的编号和报文源端口的编号,从而使UDP软件可以把报文传递给正确的接收进程。
UDP提供的服务:UDP提供的服务与IP协议一样,是不可靠的、无连接的服务。但它又不同于IP协议,因为IP协议是网络层协议向运输层提供无连接的服务,而UDP是传输层协议,它向应用层提供无连接的服务。UDP有以下优点:发送数据之前不需要建立连接,发送后也无需释放,因此,减少了开销和发送数据的时延。UDP不使用拥塞控制,也不保证可靠交付,因此,主机不需要维护有许多参数的连接状态表。UDP用户数据报只有8个字节的首部,比TCP的20个字节的首部要短。由于UDP没有拥塞控制,当网络出现拥塞不会使源主机的发送速率降低。因此UDP适用实时应用中要求源主机的有恒定发送速率的情况。
TCP提供的服务
1.端到端的面向连接的服务;2. 完全可靠性;全双工通信;3.流接口;4.应用程序将数据流发送给TCP;5.在TCP流中,每个数据字节都被编号(序号);6.TCP层将数据流分成数据段并以序号来标识;7.可靠的连接建立和完美的连接终止。TCP 协议是面向字节的。TCP 将所要传送的报文看成
是字节组成的数据流,并使每一个字节对应于一个序号。 TCP的编号与确认:TCP不是按传送的报文段来编号。TCP将所要传送的整个报文看成是一个个字节组成的数据流,然后对每一个字节编一个序号。在连接建立时,双方要商定初始序号。TCP就将每一次所传送的报文段中的第一个数据字节的序号,放在TCP首部的序号字段中。TCP的确认是对接收到的数据的最高序号(即收到的数据流中的最后一个序号)表示确认。但返回的确认序号是已收到的数据的最高序号加1。也就是说,确认序号表示期望下次收到的第一个数据字节的序号。由于TCP能提供全双工通信,因此通信中的每一方都不必专门发送确认报文段,而可以在传送数据时顺便把确认信息捎带传送。这样可以提高传输效率。
从TCP报文段格式图可以看出,一个TCP报文段分为首部和数据两部分。
首部固定部分各字段的意义如下:
发送序号:是本报文段所发送的数据部分第一个字节的序号
确认序号:期望收到的数据(下一个消息)的第一字节的序号
首部长度:单位为32位(双字) ;
控制字段
紧急比特(URG):URG=1时表示加急数据,此时紧急指针的值为加急数据的最后一个字节的序号 ;
确认比特(ACK):ACK=1时表示确认序号字段有意义 ;
急迫比特(PSH):PSH=1时表示请求接收端的传输实体尽快交付应用层 ;
复位比特(RST):RST=1表示出现严重差错,必须释放连接,重建 ;
同步比特(SYN):SYN=1,ACK=0 表示连接请求消息。SYN=1,ACK=1 表示同意建立连接消息;
终止比特(FIN):FIN=1时表示数据已发送完,要求释放连接;
窗口大小:通知发送方接收窗口的大小,即最多可以发送的字节数 ;
检查和:12B的伪首部首部 数据;
选项:长度可变。TCP只规定了一种选项,即最大报文段长度 ;
TCP的流量控制
TCP使用滑动窗口机制来进行流量控制。当一个连接建立时,连接的每一端分配一个缓冲区来保存输入的数据。当数据到达时,接收方发送确认ACK,并包含一个窗口通告(剩余的缓冲区空间的数量叫窗口)。如果发送方收到一个零窗口通告,将停止发送,直到收到一个正的窗口通告。当接收方窗口为0后应用层取出小部分数据将产生一个比较小的窗口通告,使得对方发送一些小的数据段,效益很低。可以通过延迟发送窗口通告或发送方延迟发送数据来解决。使用了窗口机制以后,提高了网络的吞吐量。
TCP如何发现拥塞
1.收到ICMP的源抑制报文;2.超时包丢失;3.TCP把发现包丢失解释为网络拥塞。
就将拥塞窗口指数增长速率降低为线性增长速率,避免网络再次出现拥塞。迅速递减:TCP总是假设大部分包丢失来源于拥塞,一旦包丢失,则TCP降低它发送数据的速率,这种方法能够缓和拥塞。慢启动:TCP开始时只发送一个消息;如果安全到达,TCP将发送两个消息;如果对应的两个确认来了,TCP就再发四个,如此指数增长一直持续到TCP发送的数据达到接收方通告窗口的一半,这时TCP将降低增长率。TCP的重传机制:TCP重传机制是TCP中最重要和最复杂的问题之一。TCP每发送一个报文段,就设置一次记时器。只要记时器设置的重传时间到而还没有收到确认,就要重传这一报文段。TCP监视每一连接中的当前延迟,并适配重发定时器来适应条件的变化。重发定时器基于连接往返延迟:
RTTnew = (alpha*RTTold) ((1 - alpha)*RTTsample))
RTO = beta*RTTnew
TCP的运输连接管理
1.运输连接管理目的:使运输连接的建立和释放都能正常的进行;2.连接建立的采用的过程叫做三次握手协议或三次联络。三次握手(three-way handshake)方案解决了由于网络层会丢失、存储和重复分组带来的问题。三次握手正常建立连接的过程:主机 A 发出序号为X的建立连接请求CR TPDU。主机 B 发出序号为Y的接受连接确认ACK TPDU,并确认A的序号为X的建立连接请求。主机 A 发出序号为X的第一个数据DATA,并确认主机 B的序号为Y的接受连接确认。
TCP的有限状态机:TCP将连接可能处于的状态及各种状态可能发生的变迁,画成如下图所示的有限状态机。图中的每一个方框就是TCP可能具有的状态。方框中写的字是TCP标准中给该状态起的名字。状态之间的箭头表示可能发生的状态变迁。箭头旁边写上的字,表示是什么原因引起这种变迁,或表明发生状态变迁后又出现什么动作。
运输协议等级
运输层的功能是要弥补从网络层获得的服务和拟向运输服务用户提供的服务之间的差距。它所关心的是提高服务质量包括优化成本。运输层的功能按级别和任选项划分,级别定义了一套功能集,任选项定义在一个级别内可以使用的功能。OSI定义了五种协议级别,即级别0(简单级)、级别1(基本差错恢复级)、级别2(多路复用级)、级别3(差错恢复和多中复用级)和级别4(差错检测和恢复级)。级别与任选项均可在连接建立过程中通过协商选用。运输层实体选用级别及任选项的依据为: 通过T-CNNECT语表示的运输服务用户的要求。 可用的网络服务质量。 传输服务用户所能与价格之比。
根据用户要求和差错性质,网络服务按质量可划为下列三种类型:
A型网络服务
具有可接受的残留差错率和故障通知率(网络连接断开和复位发生的比率),也就是无N-RESET 完美的网络服务。
B型网络服务
具有可接受的残留差错率和不可接受的故障通知率,即完美的分组递交但有N-RESET或N-ISCNNECT存在的网络服务。
C型网络服务
具有不可接的残留差错,即网络连接不可靠,可能会丢失分组或出现重复分组,且存在N-RISCONNET的网络服务。 可见,网络服务质量的划分是以用记户要求比较高,则一个网络可能归于C型 ,反之则一网络可能归于B型甚至A型 。例如:而同一网络对银行系统来说则只能算作C型了。三种类型的网络服务中,A型质量最高,分组的丢失,重复或复位等情况可以忽略不计,一般来说,能提供A型服务的公用宽或网几乎没有。B型网络质量次之,大多数X-RESET出现这就需要运输层协议来解决。c型网络服务质量最差,它是完全不可靠的服务,那些纯提供数据服务的宽域网,无线电分组交用网和很多国际网都属些类。服务质量划分得较高的网络,仅需要较简单的协议级别;反之,服务服务质量划分较低的网络,则需要复杂的协议。
五种协议级别中,级别0提供简单的运输连接,它是专为A型网络设计的。级别0提供具有商的连接建立、分段和差错报告的数据运输所需要复杂的功能,以及网络服务提供的流量控制和拆线功能。级别1以最小开销提供了基本的运输连接,它是专为B型网络连接设计的。级别1提供具有运输连接,拆线和在一个网络连接上支持;连续的运输连接的能,并提供检级别0的功能以及在没有运输服务用户参予的情况下由网络层告警的故障恢复能力。级别2具有在一个络网连接,它是为与A型网络连接而设计的,级别2具有流量的控制的运输连接的能力。它不是供检错或差恢复功能。级别3提供级别2的功能以外,还提供具有在无运输服务用户参的情况下,检测由网络告警的故障恢复能力。级别4除提供级别3的功能以外,还提供具在
无运输服务用户参情况下,检测由网络服务提供者提供低质量服务而引起的故障,并从故障中自行恢复的能力。所检测的故障类包括分组丢失、失序、重份和残缺。级别4还提供增强抗网络故障的能力。它是专为C网络连接设计的。【运输协议数据单元的定义和结构】运输协议数据单元(TPDU)结构是由数八位组(即字节)构成的,字节的编号从1开始,并按它们进入一个网络服务数据单元(NSDU)的顺序递增。每个字节中从1到8对比特进行编号最小的字节为最高有效值。TPDDU按顺序包含下列内容:头部、若存在,则占第n+1及其以后的字节;固定部分,占第2、3...、n个字节;可变部分,若存在,则占第n+1及其以后的字节。长度指示字段L1表示包含L1本身在内头部字节数长度,L1以二进制表示,最大值为254(11111110)。例如连接(CR)TPDU的长度不得超过128个字节。若指示的长度超过或实际的网络服务用户数据,则应视为协议出错。固定部分包括TPDU代码和常出现的参数。固定部分的部分的长度和结构由TPDU代码。
TPDU代码表中,"XXXX"在级别2、3、4中标志许可证(CDT);在级别0和1中为"0000"。"ZZZZ" 在级别2、3、4中标志许可证;在选择接收确认任选规程时不能用。可变部分包含不常用的参数,各参数结构如图5.3所示,参数代码,字段用二进制编码参数长度指示以字节为单位指出参数值字段的长度。数据字段包含透明的用户数据,在每一个TPDU中,用户字段的长度均受限制,如cd/cc不能超过32个字节,DR不能超过64个字节,ED为1到16个字节,而DT用户数据长度受;连接建立时协商TPDU大小的限制。
运输服务
运输层的最终目标是为用户提供有效、可靠和价格合理的服务。图5.1给出了运输层与网络层、运输服务用户三者之间的关系。在一个系统中,运输实体通过网络服务与其它运输实体通信,向运
输层用户(可以是应用进程,也可以是会话层协议)提供运输服务。运输层的服务包括的内容有:服务的类型、服务的等级、数据运输、用户接口、连接管理、快速数据运输、状态报告、安全保密等。
服务类型
运输服务有两大类,面向连接的服务和无连接的服务。面向连接的服务提供运输服务与用户之间逻辑连接的建立、维持和拆除,是可靠的服务,可提供流量控制、差错控制和序列控制。无连接服务即数据服务,只能提供不可靠的服务。
服务等级
运输协议实体应该允许运输层用户能选择运输层所提供的服务等级,以利于更有效地利用所提供的链路、网络及互连网络的资源。可供选择的服务包括差错和丢失数据的程度、允许的平均延迟和最大延迟、允许的平均吞吐率以及优先级水平等。根据这些要求,可将运输层协议服务等级细分为以下四类:
1)可靠的面向连接的协议。2)不可靠的无连接协议。3)需要定序和定时运输的话音运输协议。4)需要快速和高可靠的实时协议。
数据运输
数据运输的任务是在两个运输实体之间运输用户数据和控制数据。一般采用全双工服务,个别场合也可采用半双工服务。数据可分为正常的服务数据分组和快速服务数据分组两种,对快速服务数据分组的运输可暂时中止当前的数据运输,在接收端用中断方式优先接收。
用户接口
用户接口机制可以有多种方式,包括采用过程调用、通过邮箱运输数据和参数、用DMA方式在主机
与具有运输层实体的前端处理机之间运输等。
连接管理
面向连接的协议需要提供建立和终止连接的功能。一般总是提供对称的功能,即两个对话的实体都有连接管理的功能,对简单的应用也有仅对一方提供连接管理功能的情况。连接的终止可以采用立即终止运输,或等待全部数据运输完再终止连接。
状态报告
向运输层用户提供运输实体或运输连接的状态信息。
安全保密
包括对发送者和接收者的确认、数据的加密以及通过和解密以及通过保密的链路和节点的路由选择等安全保密的服务。
服务质量
服务质量QOS(Quality of Service)是指在运输连接点之间看到的某些运输连接的特征,是运输层能的度量,反映了运输质量及服务的可用性。服务质量可用一些参数来
描述,如连接建立延迟、连接建立失败、吞吐量、输送延迟、残留差错率、连接拆除延迟、连接拆除失败概率、连接回弹率、运输失败率等等。用户可以在连接建立时指明所期望的、可接受的或不可接受的QOS参数值。通常,用户使用连接建立原语在用户与运输服务提供者之间协商QOS,协商过的QOS适用于整个运输连接的生存期。但主呼用户请求的QOS可能被运输服务提供者降低,也可能被呼用户降低。
运输连接建立延迟是指在连接请求和相应的连接确认之间容许的最大延迟。运输连接失败概率是在一次测量样本中运输连接的失败总数与运输连接建立的全部尝试次数之比。连接失败定义为由于服务提供者方面的原因造成在规定的最大容许建立延迟时间内所请求的运输连接没有成功,而由于用户方面的原因造成的连接失败概率内。
吞吐量是在某段时间间隙内单位时间运输的用户数据的字节数,对每个方向都有吞吐量,它们由最大吞吐量和平均吞吐量组成。输送延迟是在数据请求和相应的数据指示之间所经历的时间,每个方向都有输送延迟,包括最大输送延迟和平均输送延迟。残留差错率是在测量期间,所有错误的、丢失的和重复的用户数据与所请求的用户数据之比。运输失败概率是在进行样本测量期间观察到的运输失败总数与运输样本总数之比。
运输连接拆除延迟是在用户发起除请求到成功地拆除运输连接之间可允许的最大延迟。运输连接拆除失败概率是引起拆除失败的拆除请求次数与在测量样本中拆除请求总次数之比。运输连接
保护是服务提供者为防止用户信息在未经许可的情况下被监视或操作的措施,保护选项的无保护特性、针对被动监视的保护及针对增、删、改的保护等。运输连接优先权为用户提供了指示不同的连接所具有的不同的重要性的方法。运输连接的回弹率是指在规定时间间隔(如1秒)内,服务提供者发起的连接拆除(即无连接拆除请求的连接拆除指示)的概率。QOS参数由运输服务用户在请求建立连接时加以说明,它可以给出所期望的值和可接受的值,在某些情况下,运输实体在检查QOS参数时能立即发现其中一些值是无法实现的,在这种情况下,运输实体直接将连接失败的信息告诉的信息告诉请求者,同时说明失败的原因。另外的一种情况是运输层知道它无法实现用户期望的要求(例如1200bps的吞量),但能达到稍低一点的且仍能被用户所接受的值(例如600bps的吞吐量),那么它就在请求建立连接时向目的机发出这一值。如果目的机不能处理高于源端机可接受的值(例如300bps的吞吐量),那么它就可以将参数降至该可接受值,若目的机连该可接受值也不能处理,则拒绝连接请求。由此,请求者总能立即知道建立是否成功,若成功
则商定的QOS是什么等信息。以上过程称为选项协商,一旦各种参数协商好,则在整个连接生存期内保持不变。上述QOS参数中的一部分也选用于无连接运输服务。
OSI运输服务定义(ISO8072)没有具体给出QOS参数的编码或允许值,这些参数通常在用户与电信部门之间商定。为防止某些用户对QOS过于贪心,大多数电信部门对于较高质量的服务相应地也收取较高的费用。OSI运输服务原语:传输层为上一层的应用程序提供一个标准的原语集,为服务提供者和用户之间进行可靠的数据传输架起了一座“桥梁”。ISO规范包括四种类型10个运输服务原语,见表5.2。其中服务质量参数指示用户的要求,诸如吞吐量、延迟、可靠度和优先度等。运输 服务(TS)用户数据参数最多可达32个八进制用户数据。