tcp
tcp有相当多的控制,包括次序丢包重发等等。
确认应答(ack):发送方的数据到达接收方后,为了让发送方知道数据没有丢失,所以接收方要将情况反馈,一来告诉发送方已经收到数据类,二来告诉发送方自己期待的下一组数据是什么。 如果发送方在一定时间内没有收到确认应答,那么它会重新发送数据(没有收到的情况有两个:1.发送的时候丢包,接收方根本没收到也就没办法应答 2.接受方作出的应答丢包了)
连接管理:接受方和的建立和断开都要经过多次交流 比如连接(三次握手):发送方先发送一个链接请求(syn),接收方收到后进行确认应答和链接请求,发送方收到该请求后再做一次确认应答。这便是著名的三次握手 切断连接:把连接请求(syn)变为断开请求(fin)就行了
以段为单位发送:在建立连接(三次握手)的同时,双方计算机交换自家的最大消息长度(MSS),然后取两者中最小值最为单位长度进行发送
窗口控制:因为以段作为单位发送还是显得效率底下,所以引用的窗口概念,窗口像一个更大确认的单位,以前是每发一个段,要等到收到这个段的确认信息后才发送下一个段。有了窗口后,发送完一个段后不必等待这个段的确认应答,而是继续发送,直到发送的单位是窗口的单位。 重发:发送端可以以最大的确认应答为准(如发送了1-4000,收到了1000,3000的确认应答,就认为3000以前都被接受)。如果是发送时丢失,每次发送端接受到数据后,都会发送该丢失的请求。如果请求三次。发送端才会重新发送数据。
控制流:也就是窗口大小,接受端主机向发送端主机通知自己可以接受数据的大小,于是发送端发送的数据小于这个大小。接受能力其实与缓冲层有关,发送端缓冲层的数据只有收到该数据的确认应答后才会删除,这个控制流的大小就取决于接受缓冲层的大小。
拥塞控制:为了防止网络堵塞,用算法对数据量进行控制。这就要求实时的改变这个窗口的大小。
tcp首部:1.原端口和目标端口号。2.序列号(发送数据的位置如发送1-2000)3.确认应答号 4.数据偏移(数据部分应从tcp包的哪个位开始算) 5.空置位(相当于标志 在哪一位上设置为1 这个包就是哪类包 如ack,syn) 6.窗口大小 7.校验和
udp
udp是不面向连接的,它不会在意接受方有没有接受数据,更不会在意是否丢包,是否阻塞,是否重发。
它的首部信息比较简单,有用于识别的远端口号和目标端口号,还有包长度和校验和(用于验证是否被破坏)
用处:视频,音频等多媒体实时通信,广播通信
相同与区别
tcp和UDP都是传输层协议,他们通过识别ip和端口号送到相应的应用程序中
而他们又是大不相同的,tcp是面向连接的,具备顺序控制,重发控制等,属于可靠传输。而udp是面向无连接的,它有实时性和高速性。
端口号
端口号是为了区分在同一主机上的不同程序。数据通过传输到达主机,要通过端口号才能找到处理这些数据的真正程序。
如http,ftp这些广泛使用的应用程序的端口号叫做知名端口号,在每台计算机都相同。
除了知名端口号还有些端口号被注册。
如果只有服务端有必要确定端口号,但是接受的客户端没必要确定的话,这时计算机会在不冲突的情况下为该程序分配一个端口号。
网友评论