设为首页 加入收藏

TOP

Python学习日记(二十九) 网络编程(二)
2019-09-15 00:33:28 】 浏览:93
Tags:Python 学习 日记 二十九 网络编程
围:0-65535(2^16-1),一般使用8000以后的端口

总结:如果有IP那么我就能确认唯一一台机器、如果有端口那么我就能确认唯一一个程序、如果我有IP和端口那么我就能找到唯一一台机器上的唯一一个程序

   内网IP地址:127.0.0.1(本地的回环地址),它不能提供对外服务

TCP协议

Transmisssion Control Protocol,即传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议。

当应用程序希望通过TCP与另一个应用程序通信时,它会发送一个通信请求。这个请求必须被送到一个确切的地址。在双方"握手"之后,TCP将在两个应用程序之间建立一个全双工(full-duplex)的通信。这个全双工的通信将占用两个计算机之间的通信线路,直到它被一方或双方关闭为止。

SYN:Synchronize Sequence Numbers,是TCP/IP建立连接时使用的握手信号。在客户机和服务机之间建立正常的TCP网络连接时,客户机首先发出一个SYN消息,服务器使用SYN+ACN应答表示接收到了这个消息,最后客户机再以ACK消息回应。这样在客户机和服务机之间才能建立起可靠的TCP协议,数据才可以在客户机和服务机之间传递。

ACK:Acknowledge character,即确认字符,在数据通信中,接收站发给发送站的一种传输类控制符,表示发来的数据无误。在TCP/IP协议中,如果对方成功的接收到数据,那么会回复一个ACK数据。通常ACK有自己固定的格式,长度大小,由接收方回复给发射方。

三次握手过程

第一次握手:建立连接时,客户端发送syn包(syn = j)到服务器,并进入SYN_SENT状态,等待服务器确认

第二次握手:服务器收到syn包,必须确认客户的syn(ack = j + 1),同时自己也发送一个syn(seq = k),即syn + ack包,此时服务器进入SYN_RECV

第三次握手:客户端收到服务器的syn + ack包,向服务器发送确认包ack(ack = k +1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手

完成三次握手,客户端与服务端开始传送数据

由于TCP连接时全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭,上图描述的即是如此。

第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。

第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。

第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。

第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。

UDP协议

User Datagram Protocol,UDP为应用程序提供了一种无需建立连接就可以发送封装的IP数据报的方法。当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。

QQ它的消息传输用的就是UDP协议

对比

TCP特点:面向连接、可靠传输、面向字节流、流量控制、阻塞控制

UDP特点:无连接、尽最大努力交付、面向报文

 

互联网协议和OSI模型

每层运行常见物理设备

每层运行常见的协议

两台机器间的传递模式

就是一个包快递->拆快递的过程

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Django TypeError: render() got .. 下一篇Python爬虫笔记【一】模拟用户访..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目