【8.0】网络编程(TCP/UDP)

目录

一、TCP和UDP

1、TCP

2、UDP

3、区别

4、适用场景

二、套接字实现UDP和TCP

1、TCP

2、UDP


一、TCP和UDP

1、TCP

传输控制协议,提供面向连接、可靠的字节流服务。客户和服务器彼此必须建议一个TCP连接之后才能开始传输数据。

2、UDP

用户数据报协议,是一个简单的面向数据报的运输层协议。UDP不提供可靠性,只是把应用程序传给IP层的数据报发送出去,但是并不能保证他们能到达目的地。

3、区别

  • TCP是面向连接,UDP是面向无连接
  • TCP面向字节流,UDP是基于数据报。
  • TCP保证数据正确性,UDP可能丢包
  • TCP保证数据顺序,UDP不保证

tcp优点

可靠、稳定。TCP可靠体现在TCP在传输数据之前,会有三次握手来建立连接,而且在数据传递时,有确认,窗口、重传、拥塞控制机制,数据传完之后,还会断开连接用来节约系统资源。

缺点

慢,效率低,占用系统资源高,易被攻击。在传递数据之前要先建立连接,这会消耗时间,而且在数据传递时,确认机制、重传机制、拥塞机制等都会消耗大量时间,而且要在每台设备上维护所有的传输连接。然而,每个连接都会占用系统的CPU,内存等硬件资源。因为TCP有确认机制,三次握手机制,导致TCP容易被利益,实现DOS,DDOS,CC的攻击。

UDP优点

快,比TCP稍安全。UDP没有TCP拥有的各种机制,是一种无状态的传输协议,所以传输数据非常快,没有TCP的这些机制,被攻击利用的机会就少一些,但是也无法避免被攻击。

缺点

不可靠不稳定。因为没有TCP的这些机制,UDP在网络质量不好的情况下,很容易丢吧,造成数据的缺失。

4、适用场景

TCP:当对网络质量有要求时,比如 HTTP,HTTPS,FTP 等传输文件的协议;POP,SMTP 等邮件传输的协议
UDP:对网络通讯质量要求不高时,要求网络通讯速度要快的场景。

二、套接字实现UDP和TCP

1、TCP

server:

  • 创建套接字 socket();
  • 绑定本地IP和端口 bind();
  • 设置监听数 listen();
  • 等待并接受连接请求 accept();
  • 通信 read/write
  • 关闭 close();

client:

  • 创建套接字 socket();
  • 连接服务器 connect();
  • 通信 read/write
  • 关闭 close();

2、UDP

server

  • 创建套接字 socket();
  • 绑定本地IP和端口 bind();
  • 通信接受数据 recvfrom(); (会保存客户端的IP和port)
  • 发送数据 sendto();
  • 关闭套接字 close();

client

  • 创建套接字 socket();
  • 通信发送数据:sendto();
  • 接受数据:recvfrom();
  • 关闭套接字:close();

三、TCP三次握手

第一次握手,客户跟服务器说要创建链接,第二次,服务器同意客户端的链接,然后要再和客户端确认一遍是不是真要链接,第三次客户端说真要链接,这才链接。

最初两端的 TCP 进程都处于 CLOSED 关闭状态,A 主动打开连接,而 B 被动打开连接。B的 TCP 服务器进程先创建传输控制块 TCB,准备接受客户进程的连接请求。然后服务器进程就处于 LISTEN(收听)状态,等待客户的连接请求。若有,则作出响应。

第一次握手:起初两端都处于 CLOSED 关闭状态, A 的 TCP 客户进程也是首先创建传输控制块 TCB,然后向 B 发出连接请求报文段,Client 将标志位 SYN 置为 1,随机产生一个值 seq=x,并将该数据包发送给 Server,Client 进入 SYN-SENT 状态,等待 Server 确认;

第二次握手:Server 收到数据包后由标志位 SYN=1 得知 Client 请求建立连接,Server 将标志位 SYN 和 ACK 都置为 1,ack=x+1,随机产生一个值 seq=y,并将该数据包发送给Client 以确认连接请求,Server 进入 SYN-RCVD 状态,此时操作系统为该 TCP 连接分配TCP 缓存和变量;

第三次握手:Client 收到确认后,检查 ack 是否为 x+1,ACK 是否为 1,如果正确则将标志位 ACK 置为 1,ack=y+1,并且此时操作系统为该 TCP 连接分配 TCP 缓存和变量,并将该数据包发送给 Server,Server 检查 ack 是否为 y+1,ACK 是否为 1,如果正确则连接建立成功,Client 和 Server 进入 ESTABLISHED 状态,完成三次握手,随后 Client 和 Server 就可以开始传输数据。

注意:Server 第二次握手将 ACK 置一,且进行资源分配,Client 第三次握手将 ACK 置一,且进行资源分配。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值