网络通信里的四个问题归纳

网络通信里的四个问题归纳:TCP连接与断开的过程、TCP编程实操、TCP怎么解决网络通信中的丢包问题、TCP/IP四层模型
图片引自网络

TCP连接与断开的过程

对于TCP的连接的三次握手和四次挥手,只需要记住下面两张图

三次握手

image-20240903214532052

在上图中,主要出现的保证可靠性的措施是:序列号、确认应答

四次挥手

image-20240903214618606

TCP编程

使用TCP建立服务端、客户端的流程如下:

img

TCP是面向连接的,而UDP是无连接的,因此对于UDP:

  • 在服务端,无listen、accept

  • 在客户端,无connect

对应的recvsend分别改为:recvfromsendto

为简单起见,这里以python版本展示使用流程

服务端举例(python)

import socket
 
socket_server = socket.socket()
socket_server.bind(("localhost", 8888))
socket_server.listen(1)

conn, address = socket_server.accept() # 阻塞式,等待客户端的连接
 
while True:
    data: str = conn.recv(1024).decode("UTF-8") # 阻塞式
    print(f"客户端发来的消息是:{data}")
    msg = input("请输入你要回复客户端的消息:")
    if msg == 'exit':
        break
    conn.send(msg.encode("UTF-8"))  # encode将字符串编码为字节数组对象

conn.close()
socket_server.close()

客户端举例(python)

import socket

socket_client = socket.socket()
socket_client.connect(("localhost", 8888))
 
while True:
    send_msg = input("请输入要发送给服务端的消息:")
    if send_msg == "exit":
        break
    socket_client.send(send_msg.encode("UTF-8"))
    recv_data = socket_client.recv(1024).decode("UTF-8")    
    print(f"服务端回复的消息是:{recv_data}")
 
socket_client.close()

注意到,服务端的数据收发使用的是conn,而不是socket对象socket_server

这样可以使得一个服务器可以和多个客户端分别建立点到点的连接

TCP怎么解决网络通信中的丢包问题

使用重传机制拥塞控制解决,具体描述如下:

这个问题属于可靠性传输的一部分,而TCP使用序列号、确认应答、重传机制、滑动窗口、流量控制、拥塞控制实现可靠性传输,分别叙述如下:

  • 序列号、确认应答

    实现可靠传输的方式之一

  • 重传机制

    针对数据包丢失的情况使用

    超时重传、快速重传、SACK、D-SACK四种

  • 滑动窗口

    提高通信效率的方式

    发送方无需等待确认应答,可以继续发送数据的最大值

  • 流量控制

    考虑接收方处理能力,防止因对方处理不过来,触发重发机制导致的网络流量无端浪费的情况

    接收窗口过小时阻止对方发数据过来,

    小数据的传输会使网络总体的利用率低

  • 拥塞控制

    网络出现拥塞时,继续发送大量数据包会导致数据包时延、丢失等,然后TCP重传会导致网络负担更重,并恶性循环

    拥塞控制能避免发送方数据填满整个网络

    拥塞控制算法:慢启动(一点一点提高发送数据包的数量(指数增长))、拥塞避免(线性增长)、拥塞发生、快速恢复

    对于拥塞发生,有以下两种情况:

    • 对超时重传,使用慢启动

      拥塞发送 —— 超时重传
    • 对快速重传,使用快速恢复

    image-20240531184702216

TCP/IP四层模型

img

image-20240531212614875

TCP/IP四层模型各层作用:

  • 应用层

    用户与应用程序交互

  • 传输层

    提供端到端(应用程序到应用程序)的数据传输服务,保证数据可靠传输(TCP协议)

  • 网络层

    主机到主机之间的通信,确保数据能到达目标网络

  • 链路层

    提供MAC地址,处理数据在物理媒介中的实际传输

    MAC地址,用于在局域网内标识设备,在网络中唯一标示一个网卡

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值