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. SpringBoot2.0之@Configuration注解

    SpringBoot2.0之@Configuration注解 本文转载自:https://www.javaman.cn/sb2/springboot-configuration 前面我们介绍了Spri ...

  2. html单页面中用angular js

    1.引入angluar js文件 2.html页面应用区域中加入(ng-app="myApp" ng-controller="myController"),区域 ...

  3. 从几道题目带你深入理解Event Loop_宏队列_微队列

    目录 深入探究JavaScript的Event Loop Event Loop的结构 回调队列(callbacks queue)的分类 Event Loop的执行顺序 通过题目来深入 深入探究Java ...

  4. QFNU 10-16 training

    7-9.小字辈 思路:建立一个类,并且类中存有其父节点,其地位,其儿子节点(因为儿子节点有很多,所以要用vector进行存储),通过-1这个祖先节点进行查找.首先找到-1这个祖先节点,并且读入其他位置 ...

  5. CF1487 Cat Cycle

    一个规律题目要多做多积累 , 脑子不太灵活 CF1487 Cat Cycle 题目大意: 两只猫A,B, A猫从n -> n-1 -> n-2 ... -> 1 -> 2 .. ...

  6. 服务治理演进剖析 & Service Mesh、 xDS核心原理梳理

    基于XDS协议实现控制面板与数据面板通信分享 基于这段时间在同程艺龙基础架构部的蹲坑,聊一聊微服务治理的核心难点.历史演进.最新动态, 以上内容属自我思考,不代表同程艺龙技术水准.如理解有偏差.理解不 ...

  7. [Python] 地图API

    请求位置信息 https://restapi.amap.com/v3/place/text?keywords=北京大学&city=beijing&output=xml&offs ...

  8. [bug]Flask:KeyError: 'A secret key is required to use CSRF.'

    参考 https://blog.csdn.net/huanglianggu/article/details/81263865

  9. Linux_软件包管理基本概述

    一.回去软件包的途径 1.系统发行版的光盘或官方的服务器镜像站 http://mirrors.aliyun.com        //阿里云镜像站 http://mirrors.sohu.com    ...

  10. C语言中位运算异或“∧”的作用

    1.概念异或运算符"∧"也称XOR运算符.它的规则是若参加运算的两个二进位同号,则结果为0(假):异号则为1(真).即 0∧0=0,0∧1=1, 1^0=1,1∧1=0.运算    ...