web服务器基础之套接字以及TCP协议

前言



基于C/S架构。

Web Service:应用层协议。(http,https)

解决某类具体应用,借助应用空间的某类应用程序来负责完成。

客户端:浏览器 -->应用层协议:http-->web服务端(基于套接字进行通信)

========================================分割线=============================================

网络之间的通信过程需要依靠套接字文件(IP/PORT)进行通信,应用层中的应用程序希望通过套接字方式与网络中其他非本机的进程通信时,应用程序需要进行系统调用将内核空间的功能提供给应用程序,从而应用程序就能通过内核空间的传输层、网络层、数据链路层从而到达目标主机的服务器。

如图:



BSD Socket(套接字):IPC的一种实现,允许位于不同主机(也可以是同一主机)上的进程之间进行通信;

Socket API(封装了内核中的socket通信相关的系统调用)

根据套接字的协议分类:

SOCK_STREAM: tcp套接字

SOCK_DGRAM: UDP套接字

SOCK_RAW:raw套按字

根据套按字所使用的地址格式分类,Socket Domain:

AF_INET:Address Family,IPv4

AF_INET6:ipv6

AF_UNIX:同一主机上的不同进程间基于socket套接字通信使用的一种地址Unix_SOCK



在通信过程中服务器端也会事先通过层层的系统调用从内核中调用某个众所周知的端口,并进入监听状态等待客户端与之建立连接。

如图:

这里就会涉及到客户端与服务端连接时的三次握手以及断开连接时的四次断开。

三次握手:

①客户端发送请求给服务端,服务器端接收请求并响应,此为第一次握手。

②服务器端响应请求并发送给客户端,此为第二次握手。

③客户端接收到服务器端的请求并响应给服务端,此为第三次握手。

三次握手后客户端和服务器端就建立了连接,可以进行多次通信过程。

(注:我们可以认为客户端向服务端发送请求以及服务端向客户端发送请求并不在一条传输链路上,当然,这只是一种逻辑概念,并不代表真的存在这两条链路,这样理解也能帮助我们理解四次断开的过程。)

如图

四次断开:

①客户端发送断开请求,服务器端接收请求,此为第一次断开。

②服务器端响应请求并发送断开请求给客户端,此为第二次断开。

③客户端收到服务器端断开请求,此为第三次断开。

④客户端再响应给服务器端,此为四次断开。

(我们可以将断开过程理解为客户端与服务器端断开,以及服务器端与客户端断开连接,如上文提到的断开的两次不同的传输链路)

如图

TCP协议的特性:

建立连接:三次握手;

将数据打包成段:校验和(CRC32)

确认、重传及超时;

排序:逻辑序号;

流量控制:滑动窗口算法;

拥塞控制:慢启动和拥塞避免算法

TCP FSM(TCP 的有限状态机制): CLOSED, LISTEN,SYN_SENT, SYN_RECV, ESTABLISHED, FIN_WAIT1, CLOSE_WAIT, FIN_WAIT2, LAST_ACK, TIMEWAIT,

时间: 2024-11-04 14:21:53

web服务器基础之套接字以及TCP协议的相关文章

套接字编程 ---- TCP协议

一.套接字(socket) 套接字socket: ip地址 + port端口号.在TCP/IP协议中,它唯一标识网络通讯中的一个进程. 在TCP协议中,建立连接的两个进程各自有一个socket来标识,那么这两个socket组成的socketpair就唯一标识一个连接. socket本身有"插座"的意思,因此用来描述网络连接的 一对一关系. TCP/IP协议规定,网络数据流应采用 大端字节序,即 (内存)低地址高字节(数据). 二.TCP_SOCKET 相关 TCP 协议  ----  

Linux 套接字编程 - TCP连接基础

第五章的内容,实现一个echo服务器和对应的客户端,主要收获: 0. TCP socket编程主要基本步骤 1. SIGCHLD信号含义(子进程退出时向父进程发送,提醒父进程对其状态信息进行一个获取),waitpid 和 wait在使用上的差异,前者可以配置参数设定为非阻塞方式调用,更加灵活. 2. 信号处理函数与其过程(尤其是信号发生后不列队这个性质),相同的信号多次发生(间隔非常接近的话)可能仅会调用一次信号处理函数 3. 信号处理对慢系统(阻塞)调用如accept等的影响(如果信号处理设置

Internet 套接字(TCP、UDP) 基础概念

个人博客首页(点击查看详情)-- https://blog.51cto.com/11495268个人微信公众号(点击查看详情)-- https://blog.51cto.com/11495268/2401194???? 1.简介 ????这个世界上有很多种套接字(socket)-- 如 DARPA Internet 地址(Internet 套接字).本地节点的路径名(Unix套接字).CCITT X.25地址(X.25 套接字)等:Internet 套接字 是最具代表性的,也是最经典最常用的(我

UNIX网络编程:socket套接字(TCP与UDP)

套接字简介: 套接字是网络编程中的一种通信机制,是支持TCP/IP的网络通信的基本操作单元,可以看做是不同主机之间的进程进行双向通信的端点,简单的说就是通信的两方的一种约定,用套接字中的相关函数来完成通信过程.应用层通过传输层进行数据通信时,TCP和UDP会遇到同时为多个应用程序进程提供并发服务的问题.凭借这种机制,客户/服务器系统的开发工作既可以在本地单机上进行,也可以跨网络进行,Linux所提供的功能(如打印服务,ftp等)通常都是通过套接字来进行通信的,套接字的创建和使用与管道是有区别的,

套接字,TCP,UDP

一.Socket 1.socket由来 #Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口. #我们无需深入理解tcp/udp协议,socket已经为我们封装好了,我们只需要遵循socket的规定去编程,写出的程序自然就是遵循tcp/udp标准的. 2.socket分类 #1.基于文件类型的套接字家族 #套接字家族的名字:AF_UNIX unix一切皆文件,基于文件的套接字调用的就是底层的文件系统来取数据,两个套接字进程运行在同一机器,可以通过访问同一个文件系统间接完成

linux netlink套接字实现类似ss命令 ,统计套接字以及TCP信息

参考了 ss的源代码 以及 netlink相关资料:http://blog.csdn.net/scdxmoe/article/details/27711205 实现结果为: gcc netlink_dig_530_7.c -o netlink_dig_530_7 ./netlink_dig_530_7 state      family     l.addr     l.port       r.addr     r.rport LISTEN     AF_INET   localhost  

TCP/IP网络编程之套接字类型与协议设置

套接字与协议 如果相隔很远的两人要进行通话,必须先决定对话方式.如果一方使用电话,另一方也必须使用电话,而不是书信.可以说,电话就是两人对话的协议.协议是对话中使用的通信规则,扩展到计算机领域可整理为"计算机间对话必备通信规则" 在TCP/IP网络编程之网络编程和套接字这一章中,我们已经介绍了如何创建套接字,但为了完全理解该函数,此处将继续展开讨论 #include <sys/socket.h> int socket(int domain, int type, int pr

(一)网络编程基础之套接字入门

套接字基础 首先,我们来思考下这样一个问题:为什么要使用套接字进行网络编程? 答:Linux环境下使用套接字进行进程之间的通信.套接字接口(socket interface)是一组函数,也是操作系统提供给应用程序的接口.在Unix系统中,套接字和Unix I/O函数结合起来,用来创建网络应用程序.(也就是说,操作系统对外只提供了套接字作为网络通信的接口,假如想进行网络通信,套接字我们用也得用,不用也得用,而且使用套接字来进行网络通信是十分通用的方法).这里最典型的就是客户端--服务器模型. 因特

Python开发基础-Day24socket套接字基础2

基于UDP的socket 面向无连接的不可靠数据传输,可以没有服务器端,只不过没有服务器端,发送的数据会被直接丢弃,并不能到达服务器端 1 #客户端 2 import socket 3 ip_port=('127.0.0.1',8080) 4 BUFSIZE=1024 5 sock_client=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #SOCK_DGRAM就是UDP 6 while True: 7 msg=input('>>').str