研一下学习记录(一)并发网络编程(一)--网络编程

研一下学习记录(一)

并发网络编程(一)–网络编程

这一节总结并发网络编程部分第一节网络编程的内容,参考教程为某内人工智能课程,稍后在资料部分上传pdf.不会介绍详细内容,仅仅记录我自己的重难点,要看详细内容请看pdf文件。

1. 网络基础知识

ifconfig: 查看Linux系统下计算机的IP地址命令
ping[ip]:查看计算机的连通性

端口号

端口:网络地址的一部分,在一台计算机上,每个网络程序对应一个端口。

特点:
  1. 取值范围: 0 —— 65535 的整数
  2. 一台计算机上的网络应用所使用的端口不会重复
  3. 通常 0——1023 的端口会被一些有名的程序或者系统服务占用,个人一般使用 > 1024的端口
1.2 UDP传输方法
套接字:

实现网络编程进行数据传输的一种技术手段,网络上各种各样的网络服务大多都是基于 Socket 来完成通信的。Python套接字编程模块:import socket

UDP套接字编程
  1. 创建套接字:sock=socket.socket(AF_INET,SOCK_DGRAM)
  2. 绑定地址:sock.bind((ip,port))
  3. 消息收发: data,addr=sock.recvfrom(buffersize),buffersize为每次最多接收的字节数
    n=sock.sendto(data,addr),n 为发送的字节数
  4. 关闭套接字:
    sock.close()
UDP套接字特点:
  1. 可能会出现数据丢失的情况
  2. 传输过程简单,实现容易
  3. 数据以数据包形式表达传输
  4. 数据传输效率较高
1.3 TCP传输方法
1.3. 1 简单介绍

面向连接的传输服务

  • 传输特征 :
    – 提供了可靠的数据传输,可靠性指数据传输过程中无丢失,无失序,无差错,无重复。
    – 可靠性保障机制(都是操作系统网络服务自动帮应用完成的): 确认应答机制 通信结束要正常断开连接

  • 三次握手(建立连接)
    – 客户端向服务器发送消息报文请求连接
    – 服务器收到请求后,回复报文确定可以连接
    – 客户端收到回复,发送最终报文连接建立

  • 四次挥手(断开连接)
    – 主动方发送报文请求断开连接
    – 被动方收到请求后,立即回复,表示准备断开
    – 被动方准备就绪,再次发送报文表示可以断开
    – 主动方收到确定,发送最终报文完成断开

1.3.2 tcp套接字编程
  • tcp服务端:socket - bind- listen-accept-send/recv-close
  • sock=socket.socket(AF_INET,SOCK_STREAM)
  • sock.bind((host,port))
  • sock.listen(n)
  • conn,addr=sock.accept()
  • data=conn.recv(buffersize)
  • n=conn.send(data)
  • conn.close()
  • sock.close()
  • tcp客户端:socket-connect-send/recv-close
  • sock=socket()
  • sock.connect()
  • n=sock.send()
  • sock.recv(buffersize)
  • sock.close()
1.3.3 tcp套接字细节
  • tcp连接中当一端退出,另一端如果阻塞在recv,此时recv会立即返回一个空字串。

  • tcp连接中如果一端已经不存在,仍然试图通过send向其发送数据则会产生BrokenPipeError

  • 一个服务端可以同时连接多个客户端,也能够重复被连接

1.3.4 tcp粘包问题
产生原因
  • 为了解决数据再传输过程中可能产生的速度不协调问题,操作系统设置了缓冲区
  • 实际网络工作过程比较复杂,导致消息收发速度不一致
  • tcp以字节流方式进行数据传输,在接收时不区分消息边界
带来的影响

如果每次发送内容是一个独立的含义,需要接收端独立解析此时粘包会有影响。

处理方法

消息格式化处理,如人为的添加消息边界,用作消息之间的分割
控制发送的速度

1.3.5 tcp udp对比
  1. 传输特征
    1. TCP提供可靠的数据传输,但是UDP则不保证传输的可靠性
    2. TCP传输数据处理为字节流,而UDP处理为数据包形式
    3. TCP传输需要建立连接才能进行数据传,效率相对较低,UDP比较自由,无需连接,效率较高
  2. 套接字编程区别
    创建的套接字类型不同
    tcp套接字会有粘包,udp套接字有消息边界不会粘包
    tcp套接字依赖listen accept建立连接才能收发消息,udp套接字则不需要
    tcp套接字使用send,recv收发消息,udp套接字使用sendto,recvfrom
  3. 使用场景
    tcp更适合对准确性要求高,传输数据较大的场景
    文件传输:如下载电影,访问网页,上传照片
    邮件收发
    点对点数据传输:如点对点聊天,登录请求,远程访问,发红包
    udp更适合对可靠性要求没有那么高,传输方式比较自由的场景
    视频流的传输: 如部分直播,视频聊天等
    广播:如网络广播,群发消息
    实时传输:如游戏画面
    在一个大型的项目中,可能既涉及到TCP网络又有UDP网络
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值