了解套接字之前,需要先了解基本的传输模型

其次,还需要了解网络的七层划分和四层结构

在python中,数据链路层相当于硬件层,python不需要了解,只用在传输层进行学习就足够了

其中,传输层分为TCP传输协议和UDP协议,TCP协议相当于打电话,是可靠传输,但是UDP的传输是不可靠的,就像发短信,

当短信发出,可能会出现时间的混乱,可能会出现发送失败的情况,是不可靠的。

需要提前明白的是:

  作为python开发,都是在应用层的HTTP之上进行开发的,而HTTP协议是基于TCP协议之上的

  python网络编程,其最底层,就在传输层,再往下,python是做不了的


还需要了解的,关于TCP的连接

  建立连接(三次握手)

  数据传输

  断开连接(四次挥手)

1. 建立连接(三次握手)

客户端向服务器发起请求连接的包(一次),当服务器接收的请求,就会返回一个同意连接的包(第二次),

在客户端就会建立连接,然后向服务器发送已经建立连接的信息(三次),服务器收到客户端成功连接的信息,

就会正式开始连接

第三次是为了确认,假设如果客户端网络不好,第一次请求由于网络延时,由于长时间的等待

客户发起了第二次请求,完成了三次握手后,第一次请求连接的包发送到了服务器,服务器向客户端发起同意连接,

但是并没有收到客户端的成功连接信息,服务器就不会建立连接,从而达到网资源的不浪费】

2. 数据传输

数据的传输,客户端发起请求,服务器发起响应,完全按照一发一收,一收一发

3.断开连接(四次挥手)

客户端向服务器发起完成(出动关闭)请求(第一次),服务器收到请求返回同意请求(第二次),但此时并没有完全关闭,还会有一段等待的时间,

服务器会在会这短时间将未传输完成的数据传输完毕,当完成全部传输,就会向客户端发起关闭请求(第三次),客户端收到以后,会返回确认信息(第四次),

这时服务器就会关闭,客户端会也会等待一段时间,然后关闭。

【第四次还是为了确认】


通信定位的流程

1. 先找IP

IP地址确定用户,127.0.0.1表示本地IP,0.0.0.0表示任意访问    最大到255.255.255.255

2. 再找端口

端口从0到65535,0~1023都是一些专有特殊端口,不能使用。1024~65535之间的是动态端口,可以随意使用(也有特殊的)。

其中,一些特殊的,比如80表示HTTP,22表示ssh,21FTP,3306表示Mysql,6379表示redis,27017表示MongoDB


最后学会使用套接字socket创建服务器和客服端

创建一个服务器端口

 import socket
server = socket.socket()
server.bind(("", 9999)) # 元组
server.listen(3) # python3.6以后才支持的监听最大量操作
conn,addr = server.accept() # 取conn建立对等连接
while True:
data = conn.recv(1024)
if not data:
break
print(data.decode())
conn.send(data) #原数据返回
conn.close()
server.close() #关闭

建立一个客户端:

import socket
client = socket.socket()
client.connect(('127.0.0.1', 9999)) #本地IP
while True:
data = bytes(input('>>>'), encoding='utf-8')
if not data:
break
client.send(data) # 发送消息
re_data = client.recv(1024)
print('回执消息:', re_data)
client.close()

先运行服务器,再运行客户端,就可以向服务器发送信息,并接收到服务器回执的相同的消息

传输模型,网络层次划分,三次握手,四次挥手,IP与端口,套接字socket的更多相关文章

  1. [转]Linux服务器上11种网络连接状态 和 TCP三次握手/四次挥手详解

    一.Linux服务器上11种网络连接状态: 图:TCP的状态机 通常情况下:一个正常的TCP连接,都会有三个阶段:1.TCP三次握手;2.数据传送;3.TCP四次挥手. 注:以下说明最好能结合”图:T ...

  2. Python进阶----网络通信基础 ,OSI七层协议() ,UDP和TCP的区别 , TCP/IP协议(三次握手,四次挥手)

    Python进阶----网络通信基础 ,OSI七层协议() ,UDP和TCP的区别 , TCP/IP协议(三次握手,四次挥手) 一丶CS/BS 架构 C/S: 客户端/服务器    定义:       ...

  3. 网络 TCP三次握手,四次挥手详解

    三次握手,四次挥手可以说是炙手可热的面试题了,来看看它究竟长什么样子吧! 我们先把流程图贴上来 : 为什么这么复杂? 因为TCP是可靠性传输. 确认可靠传输的前提:  TCP连接管理机制 用TCP首部 ...

  4. 在深谈TCP/IP三步握手&四步挥手原理及衍生问题—长文解剖IP

    如果对网络工程基础不牢,建议通读<细说OSI七层协议模型及OSI参考模型中的数据封装过程?> 下面就是TCP/IP(Transmission Control Protoco/Interne ...

  5. 网络模型+三次握手+四次挥手+DNS+HTTPS

    网络模型+三次握手+四次挥手+DNS+HTTPS 这篇文章十分精华,所以整理一下: 一.网络模型 OSI七层模型,和TCP/IP五层模型(更为普遍) TCP/IP 协议集: 二.TCP协议(传输层)建 ...

  6. 救救孩子吧,到现在还搞不懂TCP的三次握手四次挥手

    本文在个人技术博客同步发布,详情可用力戳 亦可扫描屏幕右侧二维码关注个人公众号,公众号内有个人联系方式,等你来撩...   前几天发了一个朋友圈,发现暗恋已久的女生给我点了个赞,于是我当晚辗转反侧.彻 ...

  7. TCP/IP三次握手四次挥手

    本文通过图来梳理TCP-IP协议相关知识.TCP通信过程包括三个步骤:建立TCP连接通道,传输数据,断开TCP连接通道.如图所示,给出了TCP通信过程的示意图. TCP 三次握手四次挥手 主要包括三部 ...

  8. TCP三次握手四次挥手,通俗易懂版

    三次握手四次挥手 三次握手 其实很好理解,三次握手就是保证双手都有发送和接受的能力.那么最少三次才能验证完成 即----> 客户端发送---服务端收到----服务端发送-- 1.客户端发送 -- ...

  9. TCP/IP协议 | TCP协议 | UDP协议 | 三次握手四次挥手

    TCP/IP协议不仅仅指的是TCP 和IP两个协议,而是指一个由FTP.SMTP.TCP.UDP.IP等协议构成的协议簇, 只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以被称为TCP ...

  10. [na]TCP的三次握手四次挥手/SYN泛洪

    1.TCP报文格式 上图中有几个字段需要重点介绍下: (1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记. (2)确认序号:Ack序号,占32位, ...

随机推荐

  1. javase - 点餐系统

    public class OrderMsg { public static void main(String[] args) throws Exception { /** * 订餐人姓名.选择菜品.送 ...

  2. javascript必须知道的知识要点(二)

    该文章不详细叙述各知识要点的具体内容,仅把要点列出来,供大家学习的时候参照,或者检测自己是否熟练掌握了javascript,清楚各个部分的内容. 内建对象可划分为数据封装类对象.工具类对象.错误类对象 ...

  3. 【Luogu4389】付公主的背包

    题目 传送门 解法 答案显然是\(n\)个形如\(\sum_{i \geq 1} x^{vi}\)的多项式的卷积 然而直接NTT的时间复杂度是\(O(nm\log n)\) 我们可以把每个多项式求\( ...

  4. git clone 出现错误

    看了好多资料终于搞定了git 中clone命令报错这个问题,废话不多说直接上步骤希望对大家有帮助. 1   删除.ssh文件夹(直接搜索该文件夹)下的known_hosts(手动删除即可,不需要git ...

  5. java.util.concurrent常用类(CountDownLatch,Semaphore,CyclicBarrier,Future)

    CyclicBarrier CyclicBarrier是用来一个关卡来阻挡住所有线程,等所有线程全部执行到关卡处时,再统一执行下一步操作.假设一个场景:每个线程代表一个跑步运动员,当运动员都准备好后, ...

  6. [转]rdlc报表中表达式的使用--switch和IIF范例

    本文转自:http://hi.baidu.com/oypx1234/item/5b35dec4e03a3ad697445266 =Switch( Fields!MLWHLO.Value = " ...

  7. JDK介绍

    Java的版本最开始是1995年的JDK Alpha and Beta版本,第二年发布JDK1.0版本之后就是JDK1.1,JDK1.2.到1998年,不再叫JDK了,而是叫J2SE,但是版本号还是继 ...

  8. .net core2.0 中使用aspectcore实现aop

    一.新建一个web application项目 1.1.添加AspectCore.Extensions.DependencyInjection引用 二.实现AbstractInterceptorAtt ...

  9. layer的基本使用

    layer是layui独立出来的一个弹出层模块 <!DOCTYPE html> <html> <head> <meta charset="UTF-8 ...

  10. Android 新浪微博开放平台应用 android签名怎么获得

    方法一: 通过命令行,直接生成MD5值 keytool -list -v -keystore keystorefile -storepass 其中keytool为jdk自带工具:keystorefil ...