记一次简单的网络编程

在讲网络编程之前,我们先在开头说一点网络编程的基础知识,比计网简略了不少,希望大家不要把这些知识直接代入到计网的考试中。

网络可分为七层/四层

七层从上到下分别是:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层

为了方便,其实也可以只抽象出四层,从上到下分别是:应用层、传输层、网络层、链路层。

应用层:解决了要传递什么数据(传数据的格式)。

传输层:解决如何传输数据(分为UDP和TCP),UDP协议:不保障数据的安全性。

网络层:IP协议(定位),可以理解为地理位置坐标。

链路层:具体的传输工具。

只要进行网络通信,传输层、网络层和链路层是一定会涉及到的,应用层不一定(如果不把传输的数据抽象出一个协议的话,就用不到应用层)。

下面我们开始讲一下简单的socket编程:

网络通信的两端分别是客户端和服务器,这篇文章的代码先不考虑应用层,只考虑传输层

下图是socket伪代码
在这里插入图片描述
首先是服务器端先创建一个socket

Socket = socket.socket(AF_INET,SOC_STREAM)

其中STREAM(流)指的是TCP协议,而UDP协议是DGRAM数据报(因为UDP发过去之后不会确认,也就是只有一次报文传输;而TCP发过去后,只要没断开连接,服务器还会返回数据确认收到的报文序号seq、ack等)。

接下来服务器端进行绑定,绑定一个地址和端口

Socket.bind()。

随后服务器端进行监听

Socket.listen()。

然后客户端进行创建与连接

So = socket.socket();So.connect()。

接下来是服务器端的接收

Socket.accept(),实际上是while True循环等待。

之后双方都可以进行消息的传送与接收

其中TCP是send()与recv()方法,UDP是sendto()与recvfrom()。

最后是四次挥手

也就是客户端的close()。

补充一点,代码中So.connect()与cli_so =
Socket.accept()进行的是著名的三次握手,也就是客户端先发一个报文seq,服务器接收后给客户端一个响应ack,客户端收到响应之后再给服务器一个响应,这些都是由操作系统内核完成的。

希望能对大家有所启发,作者@dger
,这些都是由操作系统内核完成的。

希望能对大家有所启发,作者@dger

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值