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. IDEA 导入Springboot 项目:

    更多精彩关注公众号: IDEA 导入Springboot 项目: 1. 菜单->File->New->Project From Existing Sources 2. 选中项目中的p ...

  2. 【Web前端HTML5&CSS3】03-字符实体与语义标签

    笔记来源:尚硅谷Web前端HTML5&CSS3初学者零基础入门全套完整版 目录 字符实体与语义标签 1. 字符实体 2. meta标签 3. 语义标签 4. 块元素与行内元素 块元素(bloc ...

  3. mitrproxy抓包微信小程序

    mitmproxy mitmproxy is a set of tools that provide an interactive, SSL/TLS-capable intercepting prox ...

  4. pytorch实现LeNet5分类CIFAR10

    关于LeNet-5 LeNet5的Pytorch实现在网络上已经有很多了,这里记录一下自己的实现方法. LeNet-5出自于Gradient-Based Learning Applied to Doc ...

  5. [bug] eclipse 点击new菜单后没有新建java project或class选项

    参考 https://blog.csdn.net/u013001763/article/details/54405758

  6. K8S的资源管理

    K8S的资源管理 管理K8S资源的三种基本方法: 陈述式资源管理方法-使用cli工具进行管理. 声明式资源管理方式-主要依耐资源配置清单. GUI式资源管理方法-主要依耐图形界面. 陈述式资源管理方法 ...

  7. dstat命令

    dstat命令 dstat命令是一个用来替换vmstat.iostat.netstat.nfsstat和ifstat这些命令的工具,是一个全能系统信息统计工具.与sysstat相比,dstat拥有一个 ...

  8. zabbix官方源替换为阿里云的zabbix源,一键脚本。(安装zabbix报错curl#18 - "transfer closed with 2988713 bytes remaining to read":15 ETA Trying other mirro)

    最近突然安装zabbix总是报错,比如 (24/27): t1lib-5.1.2-14.el7.x86_64.rpm | 166 kB 00:00:00 zabbix-web-4.4.6-1.el7. ...

  9. Linux_源码安装包管理理论概述

    一.源码包基本概述 1️⃣:源码包的编译用到了linux系统里的编译器,通常源码包都是用C语言开发的,这也是因为C语言为linux上最标准的程序语言 2️⃣:Linux上的C语言编译器叫做gcc,利用 ...

  10. 像素 PIXEL 图片的基本单位 像素非常小 图片是成千上万的像素组成 显示/屏幕分辨率 (DPI 屏幕分辨率)

    像素 PIXEL 图片的基本单位 像素非常小 图片是成千上万的像素组成 显示/屏幕分辨率 (DPI 屏幕分辨率) 图像分辨率 (PPI) 1920*1080是像素点长度1920个像素点 X1080个像 ...