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

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

在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. HashMap源代码剖析

    大部分思路都是一样的 .仅仅是一些细节不一样.源代码中都标了出来.jdk容器源代码还是挺简单的. public class HashMap<K,V> extends AbstractMap ...

  2. @Component注解

    @component (把普通pojo实例化到spring容器中,相当于配置文件中的 <bean id="  " class="   "/>)泛指各 ...

  3. Delphi研究,对全局变量函数与OOP编程关系的一点体会 good

    感叹:设计VCL的人真是神人啊,感觉比Pascal编译器的设计人还要牛很多,把整个Windows架构理了一遍,封装的如此之好,复用的如此之好(以至于Delphi的控件满天飞,使用还特别容易),简直惊为 ...

  4. 七牛php上传下载类,集成官方文档的方法

    <?phpuse Qiniu\Auth;use Qiniu\Storage\UploadManager;class qiniu{ public $_accesskey = null; publi ...

  5. BZOJ 4525 二分

    思路: 满足二分性质... 二分一下      就完了 //By SiriusRen #include <cstdio> #include <algorithm> using ...

  6. A - Diverse Team

    Problem description There are n students in a school class, the rating of the i-th student on Codeho ...

  7. Spring Boot (17) 发送邮件

    添加依赖 <!--发送邮件 --> <dependency> <groupId>org.springframework.boot</groupId> & ...

  8. 5.14JDBC

    一.##JDBC 1. 概念:Java DataBase Connectivity  Java 数据库连接, Java语言操作数据库. JDBC本质:其实是官方(sun公司)定义的一套操作所有关系型数 ...

  9. AI不与人为敌

    业界广为流传着一句话:有多少人工就有多少智能. 其实还应该有一句话:有多少付出就因该有多少回报.公正是世界永恒的话题. 一.人工智能还是人工愚蠢 科技从来没有善恶,也不会杀人,愚蠢的人比聪明的人做的错 ...

  10. 我的web前端自学之路-心得篇:我为什么要学习web前端?

    时光如流水,转眼间,自己已经是大三的学长了,看着一个个学弟学妹,心中有种莫名的感觉,很怀念大学的前两年时光,但也很憧憬着自己的未来,自己将要去经历很多从未经历的事.我是我们学校信科院的一名学生,在编程 ...