UDP和TCP都属于Socket协议。
UDP的特点:
1、每一次发送数据都需要绑定IP和端口号。相当于发送邮件,只管是否发送成功,不保证对方是否接收到数据,所以UDP是不安全的,有可能会丢失数据包。
2、UDP:类似于HTTP,也属于短连接。
TCP的特点:
1、只需要一次连接,属于 长连接,只要不断开的情况可以一直使用。TCP好像打电话,双方要通话,首先,要确定对方不是开机(网络可以到达),然后要确定是不是没有信号,然后还需要对方接听(通信链接)。
2、TCP通过3次“握手”来保证数据发送的安全性,不会丢失数据包。
详解:
OSI:开放系统互连参考模型:由下往上为
物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
其中:
传输层:分割并重新组装上层提供的数据流,为数据流提供端到端的传输服务。
因为,对应传输层而言,它只需要知道目标主机上的哪个服务程序来响应这个程序,而不需要知道这个服务程序是干什么的。因此,我们只需要能够抽象的表示出来这些应用程序和服务程序即可。我们使用端口号来抽象标识每个网络程序。
传输层有两大协议,即:TCP(传输控制协议)UDP(用户数据包协议)。TCP和UDP可以接收来自多个应用程序的数据流,并用端口号标识他们,然后把他们送给Internet层处理。同时TCP和UDP接收来自Internet层的数据包,也用端口号区分他们,然后交给不同的应用程序。
因此:在同一IP地址(同一个目标主机)上不同的端口号是两个不同的链接。IP地址和端口号用来唯一的确定网络上数据的目的地。
TCP中的“三次握手”:
目的:TCP是面向链接的(即端to端),在面向链接的环境中,开始传输数据之前,在两个中端之间必须先建立一个链接。建立链接的过程可以确保通信双方在发送应用程序数据包之前,都已经准备好了传送和接收数据。并且使通信双方统一了初始化序列号。
过程:传输前,需要进行三次握手建立链接。而通信结束后,通信双方都会使用改进的三次握手来关闭链接。
SYN:seq=X;
1、A的TCP程序,为这个链接分配一个端口(设为9090)。
2、同时逻辑上的将TCP连接的状态设置为:正在连接。(通过在链接状态表中添加一条记录,记录中状态为:正在连接)
3、同时,随机生成一个初始序列号X,生成一个TCP包,将初始化序列号X设置为TCP中的序列号,发送给主机B。
SYN:seq=Y ACK:ack=X+1;
1、B上TCP程序收到该数据包,查询9091端口状态,如果可以链接。
2、同样的,在逻辑上的将TCP连接的状态设置为:正在连接
3、同时,随机生成一个初始化序列号Y,根据接收的序列号X,生成应答号X+1,生成一个TCP包,将序列号和应答号分别设置到TCP包头中,将TCP数据包发给主机A。
SYN:seq=X+1 ACK:ack=Y+1.
1、A上的TCP程序接收到数据包,查询9090端口状态。
2、根据收到的SYN:seq=Y;ACK:ack=X+1; 封装一个TCP包 SYN:seq=x+1;ACK:ack=Y+1;发送给主机B。同时,TCP程序将链接状态表中该条记录状态设置为已连接。
3、主机B收到数据包,TCP程序将链接状态表中该条记录状态设置为已连接。
至此,一个TCP链接建立(三次握手)完成。
我们可以看到:
第一:传送的都是IP数据包,其实只是将收到的数据包交给TCP程序处理。
第二:链接状态,只是TCP程序中的一个逻辑状态。