网络七层模型
TCP是面向连接的,可靠的,缓慢的,可靠交付以及保证消息顺序的,而UDP是无连接的,不可靠的,没有序列保证,但是一个快速传输的协议
TCP UDP是两个协议,简单的说,TCP连接要对方确认的,而UDP却不需要对方确认收到包,所以TCP连接更加安全,但是一般播放网络流媒体使用UDP协议
传输层协议一般有TCP和UDP,TCP为可靠传输,协议本身会保证数据传输的可靠,但为此会付出很多额外的网络开销。UDP为不可靠传输,所以传输效率比较高,本端只负责发送数据,不保证对端能否收到。对于UDP,可靠性可以在应用层实现
TCP(Transmission Control Protocol) 传输控制协议
TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接
位码即tcp标志位,有6种标示:
SYN(synchronous建立联机)
ACK(acknowledgement 确认)
PSH(push传送)
FIN(finish结束)
RST(reset重置)
URG(urgent紧急)
整个流程如下图所示:
所谓三次握手(Three-Way Handshake)即建立TCP连接,是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立。在socket编程中,这一过程由客户端执行connect来触发
(1)第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。
(2)第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack (number )=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。
(3)第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。
TCP:
优点:1、可靠性,在发送数据前会建立连接(三次握手)。数据丢失、超时都会进行重传。
2、流量控制。
3、全双工机制:在一个连接上,可以在发送数据的同时接收数据。
缺点:1、会使数据包变大(不确定)?在(三次握手)的时候会确定开始序号。
TCP会为每个字节编制一个序号。在发送数据过程中,将整个传输数据分成单个的字节流,但是一次发送的话可能是多个字节(TCP数据段)。例如某次发送端的段数据的序号是500,长度是100。那么接收端在确认的时候,会回复601,表示接收端下次期望收到的字节流开始序号,那么当前收到的字节数是600字节。
UDP:
优点:1、无需建立连接,传输速度快。例如常用的网络命令ping,就是发送端直接向接收端发送4个数据包。接收端收到数据包后,回传数据包来确定网络是否通畅。
连接的理解
每一个连接对,都是由4元组来确认的,简单的概述为这种形式:《客户端ip:客户端端口号,服务器ip:服务器端口号》。
只要有一元是不同的,就是不同的连接对。
服务器会一直在服务器端口号上监听客户端的连接请求。
TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。
TCP是面向连接的,可靠的,缓慢的,可靠交付以及保证消息顺序的。
TCP充分实现了数据传输时各种控制功能,可以进行丢包的重发控制,还可以对次序乱掉的分包进行顺序控制。而这些在UDP中都没有。此外,TCP作为一种面向有连接的协议,只有在确认通信对端存在时才会发送数据,从而可以控制通信流量的浪费。TCP通过检验和、序列号、确认应答、重发控制、连接管理以及窗口控制等机制实现可靠性传输。
UDP(User Datagram Protocol 用户数据报协议)是一种面向无连接的、不可靠的、基于报文的传输层通信协议。
UDP是无连接的,不可靠的,没有序列保证,但是一个快速传输的协议。
主要的原因有两个。 (1)可靠的传输是要付出代价的,对数据内容正确性的检验必然占用计算机的处理时间和网络的带宽,因此TCP传输的效率不如UDP高。 (2)在许多应用中并不需要保证严格的传输可靠性,比如视频会议系统,并不要求音频视频数据绝对的正确,只要保证连贯性就可以了,这种情况下显然使用UDP会更合理一些.
它俩都是处于计算机网络OSI模型的第四层(传输层)中。
TCP层是位于IP层之上。同样,对于UPD也是位于IP层之上。
如果你不想丢失任何消息,使用TCP协议,而UDP能够高速传输数据,并且丢失少量的数据包是可以接受的,如视频流或在线多玩家游戏。
