day16.网络编程1
1 osi七层,tcp/ip 5层
1 cs架构和bs架构
2 互联网
3 osi七层、5层(5层名字记住:重点)
-物理层
-网线,光纤
-数据链路层
-网卡
-网络层
-路由器
-传输层(运输层)
-四层路由器
-应用层(会话层,表示层,应用层)
-http协议,ftp协议,websocket协议。。。
2 每一层功能
1 物理层
-网线----》01010101电信号---》从网线中传输电信号
-8个比特位是一个字节
2 数据链路层
-数据帧:一组电信号是一个数据帧,有头和数据部分
-网卡---》mac地址---》全球唯一---》网卡出厂--》烧在了网卡上
-48位二进制---》看到的都是16进制表示
-广播:
-局域网内通信,所有人都会接受到,通过mac地址确定给谁的数据报,如果不是自己的就不处理
-广播风暴
3 网络层
-跨局域网通信,需要经过网络层
-IP地址:0.0.0.0-255.255.255.255
-子网掩码:
-192.168.1.1 255.255.255.0
-192.168.2.1 255.255.255.0
-ARP:ip和mac的对照表
4 传输层:
-端口:0--65535,一个应用程序可以监听多个端口,但是一个端口只能属于一个应用程序
-TCP协议:可靠传输(可靠传输如何保证?三次握手,四次挥手)
-UDP协议:不可靠传输
5 应用层
-htpp,ftp,websocket....
3 常用端口号
| 应用程序 | FTP | TFTP | TELNET | SMTP | DNS | HTTP | SSH | MYSQL |
|---|---|---|---|---|---|---|---|---|
| 熟知端口 | 21,20 | 69 | 23 | 25 | 53 | 80 | 22 | 3306 |
| 传输层协议 | TCP | UDP | TCP | TCP | UDP | TCP | TCP | TCP |
DNS:把网址转换成ip地址
从浏览器发送出去的数据,都是http协议,默认是80端口
4 Tcp三次握手四次挥手(面试题)
1 tcp可靠传输:三次握手,四次挥手保证数据可靠
2 三次握手
-客户端向服务端发送链接请求 1
-服务端回复可以建立,并且带着跟客户端建立链接的数据报 2
-客户端收到后,链接建好了 3
3 这个过程后就可以可靠传输数据
4 断开链接(4四挥手)
-客户端告诉服务端,要断开 1
-服务端收到,回复ok 2
-服务端可能还有数据在传递,暂时还没断开---等数据传完
-服务端告诉客户端,我要断了 3
-客户端收到,回复ok 4
5 Socket层
1 Socket抽象层,从osi七层抽象出来的,抽象了网络层和传输层,跟语言无关,任何语言都会有socket的封装
2 专门给开发人员用的
6 基于Tcp的socket套接字(重点)
服务端
# 导入socket模块
import socket
import time
# 第一个socket是模块名,第二个socket是类名
#类实例化得到对象,得到一个socket对象
# server=socket.socket(family=socket.AF_INET,type=socket.SOCK_STREAM)
#不写默认就是他
server=socket.socket()
# 绑定地址跟端口 ,传一个元组,监听的地址,监听的端口
server.bind(('192.168.11.28',8008))
#监听
# 半连接池是5,可以缓冲5个
server.listen(5)
#等待用户连接(看源码,有两个返回结果)
# sock是连接对象,以后这个服务端和客户端交互,使用这个对象交互
# addr是客户端地址(ip和端口)
sock,addr=server.accept()
# 接收客户端发给我的消息
data=sock.recv(1024)
# 打印
print(data)
#服务端给客户端发送消息(必须是byte格式)
sock.send(b'helloworld')
time.sleep(1)
# 关闭连接对象
sock.close()
#关闭服务
server.close()
客户端
import socket
# 创建socket对象
client=socket.socket()
# 连接服务端
client.connect(('127.0.0.1',8008))
#给服务端发了一个sb
client.send(b'sb')
# 收到了服务端给我的
data=client.recv(1024)
print(data)
# 关闭
client.close()
day16.网络编程1的更多相关文章
- 猫哥网络编程系列:HTTP PEM 万能调试法
注:本文内容较长且细节较多,建议先收藏再阅读,原文将在 Github 上维护与更新. 在 HTTP 接口开发与调试过程中,我们经常遇到以下类似的问题: 为什么本地环境接口可以调用成功,但放到手机上就跑 ...
- python select网络编程详细介绍
刚看了反应堆模式的原理,特意复习了socket编程,本文主要介绍python的基本socket使用和select使用,主要用于了解socket通信过程 一.socket模块 socket - Low- ...
- Linux Socket 网络编程
Linux下的网络编程指的是socket套接字编程,入门比较简单.在学校里学过一些皮毛,平时就是自学玩,没有见识过真正的socket编程大程序,比较遗憾.总感觉每次看的时候都有收获,但是每次看完了之后 ...
- 猫哥网络编程系列:详解 BAT 面试题
从产品上线前的接口开发和调试,到上线后的 bug 定位.性能优化,网络编程知识贯穿着一个互联网产品的整个生命周期.不论你是前后端的开发岗位,还是 SQA.运维等其他技术岗位,掌握网络编程知识均是岗位的 ...
- 浅谈C#网络编程(一)
阅读目录: 基础 Socket编程 多线程并发 阻塞式同步IO 基础 在现今软件开发中,网络编程是非常重要的一部分,本文简要介绍下网络编程的概念和实践. Socket是一种网络编程接口,它是对传输层T ...
- C++11网络编程
Handy是一个简洁优雅的C++11网络库,适用于linux与Mac平台.十行代码即可完成一个完整的网络服务器. 下面是echo服务器的代码: #include <handy/handy.h&g ...
- Java - 网络编程
Java的网络编程学习,关于计算机基础的学习参考:计算机网络基础学习 - sqh. 参考:
- Linux网络编程-IO复用技术
IO复用是Linux中的IO模型之一,IO复用就是进程预先告诉内核需要监视的IO条件,使得内核一旦发现进程指定的一个或多个IO条件就绪,就通过进程进程处理,从而不会在单个IO上阻塞了.Linux中,提 ...
- Python Socket 网络编程
Socket 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的,例如我们每天浏览网页.QQ ...
随机推荐
- Redis常用数据类型及其存储结构(源码篇)
一.SDS 1,SDS源码解读 sds (Simple Dynamic String),Simple的意思是简单,Dynamic即动态,意味着其具有动态增加空间的能力,扩容不需要使用者关心.Strin ...
- Git 命令将电脑上的文件上传到 Github
1.在电脑上安装 Windows 版 Git下载地址:https://git-scm.com/downloads2.使用 Git GUI 生成 SSH Key 3.将 SSH Key 添加到 Gith ...
- RabbitMQ(二) Java使用RabbitMQ
2-1 RabbitMQ 生产者消息发送 创建 Maven 项目 Send 加入依赖 <dependency> <groupId>com.rabbitmq</groupI ...
- 使用syncthing和蒲公英异地组网零成本实现多设备实时同步
设想一个场景,如果两台电脑之间可以共享一个文件夹,其中一个增删更改其中的内容时,另一个也能同步更新,而且速度不能太慢,最好是免费的.那么syncthing就可以满足这个要求.syncthing可以实现 ...
- $nextTick解决Vue组件卸载在加载合并的问题
情况是这样的,父子组件都是复选框,点击父组件的复选框,子组件的复选框要显示并全选,取消复选框,子组件隐藏.子组件显隐我用的 v-if ,使用created钩子函数来使子组件处于全选状态. 但是出现的问 ...
- 无需编程,通过配置零代码生成CRUD RESTful API
Hello,crudapi!(你好,增删改查接口!) 本文通过学生对象为例,无需编程,通过配置实现CRUD RESTful API. 概要 CRUD简介 crud是指在做计算处理时的增加(Create ...
- 手把手教你集成华为机器学习服务(ML Kit)人脸检测功能
当给自己拍一张美美的自拍照时,却发现照片中自己的脸不够瘦.眼睛不够大.表情不够丰富可爱-如果此时能够一键美颜瘦脸并且添加可爱的贴纸的话,是不是很棒? 当家里的小孩观看iPad屏幕时间过长或者眼睛离屏幕 ...
- rest framework Views
基于类的意见 Django的基于类的意见是从旧式的观点颇受欢迎. - Reinout面包车里斯 REST框架提供了一个APIView类,它的子类Django的View类. APIView类是从正规不同 ...
- 为什么要从 Linux 迁移到 BSD2
OpenZFS on Linux,是项目的 Linux 部分,目前有 345 个活跃的贡献者,有超过 5600 个提交,而且几乎每天都有提交!一些世界上最大的 CDN 和数据存储服务在 FreeBSD ...
- @WebFilter("")配置servlet访问出现404的原因
配置 servlet 一共有两种方式 直接在web.xml中配置name 和 url-parttern 使用注解配置servlet 使用注解的方式配置servlet是在servlet3.0之后新增的特 ...