1 : osi 七层,tcp/ip 五层

1 cs架构和bs架构
2 互联网
3 osi七层 tcp/ip五层
-物理层
  -网线、光纤
       -数据链路层
      -网卡
       -网络层
      -路由器
       -传输层(也叫运输层)
      -四层路由器
       -应用层(会话层、表示层、应用层)
      http协议、ftp协议、websocket协议。。。

2每一层功能

1 物理层
-网线 ----> 1010101电信号 -----> 从网线中传输电信号
   -8个比特位是1个字节(重要)
2 数据链路层
-数据帧: 一组电信号就是一个数据帧/数据报,有头和数据部分
   -网卡: ----> mac地址 ----> 全球唯一 ----->网卡出厂---->烧在网卡上
   -48位二进制 ----> 看到的都是16进制表示
   -广播:
       -局域网内通信,所有人都会接收到,通过mac地址确定是给谁的数据帧/数据报,如果不是自己的就不处理
   -广播风暴
3 网络层
-跨局域网通信,需要经过网络层
   -IP地址
   -子网掩码
   -ARP协议 : ip和mac的对照表
4 传输层
-端口: 0-65535, 一个应用程序可以监听多个端口,但是一个端口只能属于一个应用程序
   -TCP协议: 可靠传输
   -UDP协议: 不可靠传输

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 断开链接(四次挥手)
-客户端告诉服务器,要断开    ----1
   -服务端收到,回复ok         ----2
   -服务端可能还有数据在传递,暂时还没断开-----等数据传完
   -服务端告诉客户端,我要断了   ----3
   -客户端收到,回复ok         ----4

5 Socket层

1 Socket抽象层,从osi七层抽象出来的,抽象了网络层和传输层,跟语言无关,任何语言都会有socket的封装
2 专门给开发人员用的

6 基于TCP的socket套接字(重点)

(简易版本)
服务端
import socket
sever = socket.socket()
sever.bind(('192.168.11.123', 7777))
print('服务端启动完成,等待连接...')
sever.listen(5)
sock, addr = sever.accept()
while True:
data = sock.recv(1024)
print('客户端发来的信息', data.decode('utf-8'))
msg = input('请输入: ').strip()
if msg == 'q':
break
sock.send(msg.encode('utf-8'))
sock.close()


(客户端)
import socket

client = socket.socket()
client.connect(('192.168.11.123', 7777))
while True:
msg = input('请输入: ').strip()
if msg =='q':
break
client.send(msg.encode('utf-8'))
data = client.recv(1024)
print('服务端发来的信息: ',data.decode('utf-8'))
client.close()

 

总结

1 osi 七层模型 ----> 五层
-物理层
  -10101000电信号----->网线、光纤
   -数据链路层
  -网卡---->mac地址,全球唯一
       -广播: 局域网中通信
-网络层
  -ip地址: ipv4,ipv6
       -子网掩码+ip区分是不是属于同一个子网
       -arp协议: ip和mac地址的映射表
   -传输层(运输层)
  -端口: 0 --- 65535
       -端口是用来区分应用程序的
       -TCP: 可靠传输,三次握手,四次挥手
       -UDP: 不可靠传输
   -应用层
  -http,ftp
2 常用的端口(重要)
-80: http协议,基于TCP
   -3306 :mysql
   -53 DNS(域名解析)---->基于UDP
3 TCP/IP---->socket抽象层---->针对于程序员来写客户端,服务端的程序(更好写)
4 基于TCP的套接字(socket)的客户端和服务端

01:osi七层---基于TCP协议的套接字(socket)的更多相关文章

  1. 网络编程(二)--TCP协议、基于tcp协议的套接字socket

    一.TCP协议(Transmission Control Protocol 传输控制协议) 1.可靠传输,TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会 ...

  2. 网络编程(二)——TCP协议、基于tcp协议的套接字socket

    TCP协议与基于tcp协议的套接字socket 一.TCP协议(流式协议) 1.可靠传输,TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的 ...

  3. 网络编程----socket介绍、基于tcp协议的套接字实现、基于udp协议的套接字实现

    一.客户端/服务器架构(C/S架构)                                                即C/S架构,包括: 1.硬件C/S架构(打印机) 2.软件C/S架 ...

  4. 网络编程之TCP三次握手与四次挥手、基于TCP协议的套接字编程

    目录 TCP三次握手和四次挥手 背景描述 常用的熟知端口号 TCP概述 TCP连接的建立(三次握手) TCP四次挥手 如果已建立连接,客户端突然断开,会怎么办呢? 基于TCP协议的套接字编程 什么是S ...

  5. python 之 网络编程(基于TCP协议的套接字通信操作)

    第八章网络编程 8.1 基于TCP协议的套接字通信 服务端套接字函数 s.bind() 绑定(主机,端口号)到套接字 s.listen() 开始TCP监听 s.accept() 被动接受TCP客户的连 ...

  6. [网络编程之Socket套接字介绍,套接字工作流程,基于TCP协议的套接字程序]

    [网络编程之Socket套接字介绍,套接字工作流程,基于TCP协议的套接字程序] 为何学习socket套接字一定要先学习互联网协议: 1.首先:要想开发一款自己的C/S架构软件,就必须掌握socket ...

  7. 什么是 socket?简述基于 tcp 协议的套接字通信流程?

    Socket的英文原义是"孔"或"插座".通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄, 可以用来实现不同虚拟机或不同计 ...

  8. 网络编程(四)——基于udp协议的套接字socket、socketserver模块的使用

    基于udp协议的套接字.socketserver模块 一.UDP协议(数据报协议) 1.何为udp协议 不可靠传输,”报头”部分一共只有8个字节,总长度不超过65,535字节,正好放进一个IP数据包. ...

  9. 基于TCP协议的套接字编程

    06.26自我总结 1.关于Socket Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在 ...

随机推荐

  1. android之Tween Animation

    android Tween Animation有四种,AlphaAnimation(透明度动画).ScaleAnimation(尺寸伸缩动画).TranslateAnimation(位移动画).Rot ...

  2. thinkphp 连接多个数据库(tp5.1为例)

    1.config目录下添加数据库配置,内容跟原数据库配置一样就可以(数据库名改成连接的第二个数据库名) 2.连接部分代码: $db = Db::connect(config('database2.') ...

  3. jenkins邮件报警机制配置

    1.下载email插件 Jenkins配置email前需要先安装email插件:Email Extension.Email Extension Template Plugin 2.系统配置 在Jenk ...

  4. Java容器 | 基于源码分析Map集合体系

    一.容器之Map集合 集合体系的源码中,Map中的HashMap的设计堪称最经典,涉及数据结构.编程思想.哈希计算等等,在日常开发中对于一些源码的思想进行参考借鉴还是很有必要的. 基础:元素增查删.容 ...

  5. 设置vue全局配置

    全局配置 创建全局配置文件 vue.config.js 添加配置项

  6. systemctl服务------字符和图像界面切换systemctl set-default multi-user.target systemctl isolate multi-user.target #当前立即进入字符模式 [root@room4pc09 桌面]# systemctl isolate graphical.target #当前立即进入图形模式

    查看服务运行状态 [root@room4pc09 桌面]# systemctl status crond #查看服务运行状态 ● crond.service - Command Scheduler L ...

  7. 《SystemVerilog验证-测试平台编写指南》学习 - 第2章 数据类型

    <SystemVerilog验证-测试平台编写指南>学习 - 第2章 数据类型 2.1 内建数据类型 2.2 定宽数组 2.2.1 声明 2.2.2 常量数组 2.2.3 基本的数组操作 ...

  8. Linux压力测试软件Stress安装及使用指南2

    stress工具使用指南和结果分析 Linux压力测试软件Stress安装及使用指南     一.Stress是什么 stress是一个linux下的压力测试工具,专门为那些想要测试自己的系统,完全高 ...

  9. 012.Python的字典和集合的相关函数

    一 字典的相关函数 1.1 增函数 dictvar = {"a":1,"b":2} dictvar["c"] = 3 print(dictv ...

  10. STM32的VDD与VDDA

    http://bbs.21ic.com/icview-1651072-1-1.html VDD VSS 就是平常的电源与地.后面带A的都是模拟量的电源.