Python学习32天(socket、tcp协议)

  守望了31天,终于等到了网络编程阶段,很多很多的基础原理知识,然后脑子懵了,进入新世界的感觉。

  一、客户端\服务器架构

  1.硬件C/S架构(打印机) 2.软件C/S架构   

  2.互联网中处处是C/S架构   

  如黄色网站是服务端,你的浏览器是客户端(B/S架构也是C/S架构的一种)   

  腾讯作为服务端为你提供视频,你得下个腾讯视频客户端才能看它的视频) C/S架构与socket的关系:

  学习socket就是为了完成C/S架构的开发

  

  二、互联网协议

  1.如何基于socket编程,来开发一款自己的C/S架构软件

  2.C/S架构的软件(软件属于应用层)是基于网络进行通信的

  3.网络的核心即一堆协议,协议即标准,你想开发一款基于网络通信的软件,就必须遵循这些标准。

  4.让我们从这些标准开始研究,开启我们的socket编程之旅

  然后是我们伟大的socket做了什么呢?请看下图

二、socket到底是一个什么东西呢?

  Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。

  所以,我们无需深入理解tcp/udp协议,socket已经为我们封装好了,我们只需要遵循socket的规定去编程,写出的程序自然就是遵循tcp/udp标准的

三、关于嵌套字

  套接字起源于 20 世纪 70 年代加利福尼亚大学伯克利分校版本的 Unix,即人们所说的 BSD Unix。 因此,有时人们也把套接字称为“伯克利套接字”或“BSD 套接字”。一开始,套接字被设计用在同 一台主机上多个应用程序之间的通讯。这也被称进程间通讯,或 IPC。套接字有两种(或者称为有两个种族),分别是基于文件型的和基于网络型的。

  套接字家族的名字:AF_UNIX

  unix一切皆文件,基于文件的套接字调用的就是底层的文件系统来取数据,两个套接字进程运行在同一机器,可以通过访问同一个文件系统间接完成通信

  套接字家族的名字:AF_INET

  (还有AF_INET6被用于ipv6,还有一些其他的地址家族,不过,他们要么是只用于某个平台,要么就是已经被废弃,或者是很少被使用,或者是根本没有实现,所有地址家族中,AF_INET是使用最广泛的一个,python支持很多种地址家族,但是由于我们只关心网络编程,所以大部分时候我么只使用AF_INET)

  一个生活中的场景。你要打电话给一个朋友,先拨号,朋友听到电话铃声后提起电话,这时你和你的朋友就建立起了连接,就可以讲话了。等交流结束,挂断电话结束此次交谈。 生活中的场景就解释了这工作原理。

  

  大致就是这么一个过程

四、socket实现一个简单的传输

客户端:

import  socket

phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

phone.connect((‘127.0.1.11‘,8000)) #拨通电话

phone.send(‘hello‘.encode(‘utf-8‘)) #发消息
data=phone.recv(1024)
print(‘收到服务端的发来的消息:‘,data)

服务端:

import socket

phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #买手机
phone.bind((‘127.0.1.11‘,8000)) #绑定手机卡
phone.listen(5) #开机
print(‘---->‘)
conn,addr=phone.accept() #等电话

msg=conn.recv(1024) #收消息
print(‘客户端发来的消息是: ‘,msg)
conn.send(msg.upper())#发消息

conn.close()
phone.close()

五、tcp协议的三次握手、四次挥手

1.三次握手:

  首先由客户端(client)向服务器发送SYN请求,同时传输链接seq,服务器(server)不管是好是坏都会返回一个链接seq+1,随后客户端确认链接返回ACK = y+1

  整个过程会相互回应,经过三次最终建立双向的传输链接

  关于listen()就是用来存放SYN发起的半链接,只要三步没有全走完,就都是半链接,listen里面的参数就是表示存放的半链接数

  同时也因为tcp协议不区分好坏的回复,就容易收到SYN洪水攻击(感觉很牛逼,其实我啥都不知道)

2.数据传输:

  这个么得说的,你来我往的传输

3.四次挥手

  断开链接时,往往是谁先结束传输,谁就发起断开,发起后,只要对方确认即可断开,但是传输时双向的,所以需要四次

  如服务器往往为了保证自己的正常运行,在完成数据传输后就会主动断开链接,客户端确认后,服务器向客户端的就会断开了,此时客户端未发送断开请求,但是服务器已主动进入TIME_WAIT状态,反之也是一样的。

  今天其实好多是没有听明白的,虽然自己闹了一下服务器和客户端的交互,但是好low啊

  两个任务吧,

  1.有空还是看一下linux基础部分的计算机基础    2.搞一个服务器虚拟机玩玩

  今天就是这些了,需要抓紧消化一下了,明天自己试一试在服务器里处理客户端传递来的参数,哎呀呀,感觉小程序的路正在一步步靠近。

  ~~~~~

原文地址:https://www.cnblogs.com/xiaoyaotx/p/12571814.html

时间: 2024-10-17 16:36:33

Python学习32天(socket、tcp协议)的相关文章

Python网络编程02/基于TCP协议的socket简单的通信

目录 Python网络编程02/基于TCP协议的socket简单的通信 1.昨日内容回顾 2.socket 2.1 socket套接字 2.2 基于TCP协议的socket简单通信 Python网络编程02/基于TCP协议的socket简单的通信 1.昨日内容回顾 1.单播:单独联系某一个人 2.广播:给所有人发送消息(群发) 3.比特流:bit就是0101跟水流一样的源源不断的发送01010101 4.以太网协议:将数据进行分组:一组称之为一帧,数据报 head|data head:18字节:

进程对象的其他方法、守护进程、使用多进程实现 socket tcp协议 server端的并发(抢票程序)、队列、进程之间的通信(IPC)

# 进程对象的其他方法 from multiprocessing import Process import time class MyProcess(Process): def __init__(self, a, b): # 为了给子进程传递参数 super().__init__() self.a = a self.b = b def run(self): print("子进程开始执行") time.sleep(2) print("子进程结束", self.a,

java基础知识回顾之java Socket学习(一)--TCP协议编程

TCP传输(传输控制协议):TCP协议是一种面向连接的,可靠的字节流服务.当客户端和服务器端彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能进行数据的传输.它将一台主机发出的字节流无差错的发送到互联网的其它主机.在发送端负责把上层传下来的字节流分成报文段传递给下层.在接收端负责把报文重组后交给上层.TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端.

Python学习之路--Socket

Socket socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,对于文件用[打开][读写][关闭]模式来操作.socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO.打开.关闭) socket和file的区别: file模块是针对某个指定

python学习之day6——socket基础

socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,对于文件用[打开][读写][关闭]模式来操作.socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO.打开.关闭) socket和file的区别: file模块是针对某个指定文件进行[打开

python学习笔记(socket模块)

1.socket模块使用要分为服务端及客户端,服务端用于接收并处理请求,然后把请求数据回传回到客户端,客户端用于读取数据.关闭连接.最后结束交互 2.服务端socket模块使用步骤: 1 import socket 2 3 phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) 4 phone.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) # 5 phone.bind(('127.0.

python学习 网络编程--socket

网络通信标准---网络协议互联网协议--osi七层协议五层协议:应用层:应用层.表示层.会话层          传输层:传输层    网络层:网络层    数据链路层:数据链路层    物理层:物理层物理层就是用来发送电信号的数据链路层跑协议,分组标准. ethernet以太网协议,规定电信号如何分组电信号拿来后是一堆数据,只要规定了怎么分组才能拿到正确数据ethernet规定一组电信号构成一个数据报,叫做帧每一数据帧分成:报头head和数据data两部分但凡接入互联网必须要有网卡每个网卡出厂

TCP协议的学习(三)TCP协议三次握手及攻击

(一)三次握手 ACK : TCP协议规定,只有ACK=1时有效,也规定连接建立后所有发送的报文的ACK必须为1 SYN(SYNchronization) : 在连接建立时用来同步序号.当SYN=1而ACK=0时,表明这是一个连接请求报文.对方若同意建立连接,则应在响应报文中使SYN=1和ACK=1. 因此, SYN置1就表示这是一个连接请求或连接接受报文. 发送序列号:Sequence Number 确认序列号:Acknowledgment Number CLOSED: 初始状态. LISTE

python 学习5 网络编程-TCP/UDP

摘抄自:廖雪峰的官方网站:http://www.liaoxuefeng.com/ TCP客户端和服务器端代码: #coding=utf-8 #客户端程序TCP 连接 import socket s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.connect(('127.0.0.1',9999)) print(s.recv(1024)) for data in ['Michael','Tracy','Sarah']: s.send(data