网络协议,socket模块
"""
网络通讯要素:
1.物理介质
2.通讯协议 osi五层模型
应用层
传输层
网络层
数据链路层
物理层 物理层能传输010101二进制
单纯的二进制是没有意义的,必须得知道如何解析这些二进制,这就有了数据链路层 数据链路层,以太网协议
用于以太协议主要功能
定义电信信号的分组方式,一组有几个,哪个部分代表什么含义
一组电信号最大为1518
必须包含head 和 data
每个计算机必须具备网卡,网卡具备一个全球唯一的mac地址,可以用来标识唯一一台计算机
由于不知道对方的mac地址,以太网通过广播的方式来通讯 网络层ip协议 TCP是一种可靠的传输协议
可以保证数据传输是完整的
TCP在传输数据前会经过一个三次握手的过程,来验证数据传输是否可靠 优点:可以保证数据完整性 socket:
python提供的模块
同于处理网络传输相关操作
封装了底层复杂网络协议
对外提高了简单的接口 socket减少网络编程的工作量
如何使用socket模块 """ # 服务端
"""
import socket
# 默认使用TCP协议
# 创建一个socket对象
# cs架构的程序必然有客户端和服务端程序
# 为了统一使用方式,服务器端和客户端使用的都是socket
soc = socket.socket()
# 作为服务器必须为socket指定ip和端口号
soc.bind(("192.168.12.212",8080))
# 监听端口
soc.listen()
# 接收客户端连接请求
client,address = soc.accept()
# 接收
data = client.recv(1024)
print(data.decode("utf-8"))
# 发送
client.send("我是你爸爸".encode("utf-8"))
# 要注意 在服务端 收发数据是客户端socket来完成的 服务器端的sock 只做处理连接
# 收发数据都是bytes类型
# 接收客户端请求
# res = soc.accept()
# 关闭socket
soc.close()
"""
# 客户端
"""
import socket
# 创建socket
client = socket.socket()
# 连接服务器
client.connect(("192.168.12.212",8080))
# 收发数据
client.send("你个憨皮".encode("utf-8"))
data = client.recv(1024)
print(data.decode("utf-8"))
# 关闭连接
client.close()
""" # 总结:
"""
异常处理的目的 提高程序的健壮性 网络通讯的基本要素 1.物理介质 网线 光纤 无线网络
2.通讯协议 用于规定双方如何交换数据
OSI七层模型
OSI五层
应用层
传输层
网络层
数据链路层
物理层 物理层能够传输01101二进制
00001020120 102102102101021 02102100210201021020 102102102002102 1020120102121020
单纯的二进制是没有意义的 必须得知道如何解析这些二进制 这就有了数据链路层 工作在数据;链路层的协议是以太网协议
以太协议的主要功能
1.定义电信信号的分组方式 一组有几个 那个部分代表什么含义
一组电信好最大为 1518
必须包含 head 和data
[head,data]
2.每个计算机必须具备网卡 网卡具备一个全球唯一的mac地址 可以用来表示唯一的一台计算机 3.由于不知道对方的mac地址 以太网通过广播的方式来进行通讯 网络层
工作在网络层是ip协议
会给每个计算机分配一个ip地址
四位的点分十进制
0.0.0.0 - 255.255.255.255
192.168.1.2
前三位称之为网络号
最后一位称为主机号 由于c类地址是共享的 所以 单独使用网络号 是无法区分子网
所以引入了子网掩码 专门用来验证两个ip地址是否属于同一个子网
子网掩码 只是区分而已
具体如何找 得靠网络号 通过路由协议来找到对方的网关 有了ip协议之后
可以通过网络号来定位全球范围内的某个局域网
通过主机号 来定位局域网中具体的某台计算机
虽然可以定位到以太计算机 但是 无法定位到某个应用程序 传输层
工作在传输层的两个协议 TCP/UDP
传输层要求必须为每一个需要联网应用程序绑定一个端口号 用于区分是哪一个应用程序
端口号就是一个整数 最大不超过65535
端口号在同一台计算机中不能重复 0 - 1024 是系统保留的端口
注意:不要使用常见的程序已经占用的端口 比如apache 的8080 mysql的 3306 FTP 21 这一堆网络协议 其实本质的就做两个事情
1.如何找到对方
2.数据如何发送 ip用来 标识一个局域网中的一台电脑 端口用于标识某个应用程序 至此 我们就可以准确的定位到某个计算机中的某个程序 TCP 是一种可靠的传输协议
可以保证数据传输是完整的
如何保证数据传输的完整的?
TCP在传输数据前 会经过一个三次握手的过程 来验证数据传输是否可靠
在断开连接前 会经过四次挥手的过程 来保证数据完整传输了 在三次握手时 的确保证了数据传输是可靠 但是后续 有可能 由于种种原因 例如网络中断 ,,丢包等等 导致数据不完整 所以 TCP的解决方案
每次发送数据报 都需要对方返回一个确认信息
如果一段时间后 对方没有返回 就重复发送
直到重试的次数 超过某个指定的值 就判断连接已经丢失 TCP的优点: 可以保证数据完整性
由于需要接收确认信息 所以整体传输效率较低
"""
网络协议,socket模块的更多相关文章
- 铁乐学Python_Day33_网络编程Socket模块1
铁乐学Python_Day33_网络编程Socket模块1 部份内容摘自授课老师的博客http://www.cnblogs.com/Eva-J/ 理解socket Socket是应用层与TCP/IP协 ...
- python 网络编程--socket模块/struct模块
socket模块: 客户端:CS架构, client -> server 浏览器:BS架构, browser -> server 网络通信本质:传输字节 doc命令查看ip地址:ipc ...
- 网络编程---socket模块
内容中代码都是先写 server端, 再写 client端 1 TCP和UDP对比 TCP(Transmission Control Protocol)可靠的.面向连接的协议(eg:打电话).传输效 ...
- 网络 --- 3 socket模块 粘包
一 .socket 模块参数及方法 二.缓冲区 三.粘包 1.两种粘包现象 ①连续的小包可能会被优化算法给组合到一起进行发送 ②第一次如果发送的数据大小2000B接收端一次性接受大小为1024, 这就 ...
- 网络编程socket模块subprocess模块 粘包的解决
什么是socket? tcp 可靠地面向连接协议 udp 不可靠的,无连接的服务,传送效率高
- Python的网络编程socket模块
(1)利用socket进行简单的链接 Python里面的socket支持UDP.TCP.以及进程间的通信,socket可以把我们想要发送的东西封装起来,发送过去,然后反解成原来的样子,事实上网路通信可 ...
- day28 网络协议OSI 及socket模块
反射都是操作对象中的__dict__的内容 class Student: def study(self): print("正在学习....") stu = Student() if ...
- Python网络编程(socket模块、缓冲区、http协议)
网络的概念:主机 端口 IP 协议 服务器: localhost/127.0.0.1 客户端: 只是在本机启动客户端,用127.0.0.1访问 服务器: 0.0.0.0 客户端: ...
- 网络编程基础:网络基础之网络协议、socket模块
操作系统(简称OS)基础: 应用软件不能直接操作硬件,能直接操作硬件的只有操作系统:所以,应用软件可以通过操作系统来间接操作硬件 网络基础之网络协议: 网络通讯原理: 连接两台计算机之间的Intern ...
随机推荐
- win10下 git运行出现 fatal: open /dev/null or dup failed: No such file or directory
在C:\Window\System32 位置,找到cmd,以管理员运行cmd,输入 sfc/scannow命令,进行修复操作.然后重启就可以用了
- vue-cli项目在IE下运行钩子函数抛出异常“ReferenceError: “Promise”未定义"”的解决办法
兼容IE是个坑,低版本IE很多都没法跑起来 问题现象:vue-cli项目在IE下运行,会在钩子函数出现 ReferenceError: “Promise”未定义 解决办法: step1:安装最新的we ...
- 全志A33开发板的安卓控制LED-2-JNI基础
虽然您可以完全使用Java编写应用程序,但有些情况下Java本身并不能满足您的应用程序的需求.当应用程序不能完全用Java编写时,程序员使用JNI编写Java本机方法来处理这些情况. 以下示例说明何时 ...
- gcc的调试调研——gdb
首先来介绍一下gcc的选项: 其他选项都为常用编译选项,在这里介绍一下优化功能: 优化编译时使用选项: -O:可以告诉gcc同时减小代码的长度和执行时间,其效果等价于-O1,在这一级别上能够进行的优化 ...
- nginx添加ssl证书
ssl的证书是通过docker nginx letsencrypt 这篇随笔生成的,下面介绍如何在nginx中添加ssl 这个为全部配置, 需要替换你自己的域名,配置中强制https了 server ...
- 18.9 有关设置栈指针sp寄存器r13
为什么在调用C程序时,要在汇编(.S)文件中设置栈指针sp(Stack Pointer) r13?设置栈指针的时候赋的值是多少,如何确定? .text .global _start _start: / ...
- mplayer用法收集【转】
转自:https://blog.csdn.net/wylhistory/article/details/4816653 1,录音: mplayer mms://202.***.***.***/test ...
- 判断文件是否存在,不要用if exist和if not exist,因为他们会受到文件是否隐藏的影响,改用dir /a 命令代替
@echo off & setlocal enabledelayedexpansionrem 判断文件是否存在,不要用if exist和if not exist,因为他们会受到文件是否隐藏的影 ...
- 微信小程序中的组件使用1
不管是vue还是react中,都在强调组件思想,同样,在微信小程序中也是使用组件思想来实现页面复用的,下面就简单介绍一下微信小程序中的组件思想. 组件定义与使用 要使用组件,首先需要有组件页面和使用组 ...
- 你云我云•兄弟夜谈会 第二季 5G
0. 概况 时间:2019年1月29日 21:30~23:15 兄弟团:金孝(主持人).肖力.楼炜.张亮.孙杰.熊.世民 主题:5G 1. 5G超简单科普 金孝首先对大家做了超简单5G科普.5G 是第 ...