socket、TCP、HTTP的关联
1.什么是socket
socket的通俗解释:
Socket非常类似于电话插座。以一个国家级电话网为例,电话的通话双方相当于相互通信的2个进程,区号是它的网络地址;区内一个单位的交换机相当于一台主机,主机分配给每个用户的局内号码相当于Socket号。任何用户在通话之前,首先要占有一部电话机,相当于申请一个Socket;同时要知道对方的号码,相当于对方有一个固定的Socket。然后向对方拨号呼叫,相当于发出连接请求(假如对方不在同一区内,还要拨对方区号,相当于给出网络地址)。假如对方在场并空闲(相当于通信的另一主机开机且可以接受连接请求),拿起电话话筒,双方就可以正式通话,相当于连接成功。双方通话的过程,是一方向电话机发出信号和对方从电话机接收信号的过程,相当于向Socket发送数据和从socket接收数据。通话结束后,一方挂起电话机相当于关闭Socket,撤消连接。
连接过程:
根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认。
(1)服务器监听:是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。
(2)客户端请求:是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。
(3)连接确认:是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,连接就建立好了。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。
函数原型
在网间网内部,每一个Socket用一个半相关描述:(协议,本地地址,本地端口)。
创建 函数 原型:
int socket(int domain, int type, int protocol);
参数说明:
domain:协议域;
type:指定Socket类型;
protocol:指定协议;
这里我只重点介绍protocol 协议;协议像是一个规定,只有两方按照相同的标准要求操作,才能够实现通讯。
socket常用协议有:TCP传输协议、UDP传输协议、STCP传输协议、TIPC传输协议。
2.TCP应用层
传输协议介绍
TCP/IP(Transmission Control Protocol/Internet Protocol) 即传输控制协议/网间协议,是一个工业标准的协议集,它是为广域网(WAN)设计的。
TCP是因特网中的传输层协议,使用三次握手协议建立连接,经过四次握手的方式来终止。具体过程如图,不详细解释了,参考文档:基础笔记(三):网络协议之Tcp、Http。
TCP提供一种面向连接的、可靠的字节流服务。面向连接意味着两个使用TCP的应用(通常是一个客户和一个服务器)在彼此交换数据包之前必须先建立一个TCP连接。这一过程与打电话很相似,先拨号振铃,等待对方摘机说“喂”,然后才说明是谁。在一个TCP连接中,仅有两方进行彼此通信。
......
应用层简介
在百度中的介绍:
应用层主要负责程序间的沟通。
1、TCP、UDP不是应用层协议,是传输层协议。
2、应用层所谓的应用,就是为了一个具体的应用场景而做的协议,应用层协议之间的区别,就是应用之间的区别。
本文这里重点介绍基于 TCP 的应用层协议
应用层协议(application layer protocol):定义了运行在不同端系统上的应用程序进程如何相互传递报文。
应用层协议的定义:
(1)交换的报文类型,如请求报文和响应报文;
(2)各种报文类型的语法,如报文中的各个字段公共详细描述;
(3)字段的语义,即包含在字段中信息的含义;
(4)进程何时、如何发送报文及对报文进行响应。
常见的应用层协议有:
HTTP :(HyperText Transfer Protocol)超文本传输协议
-
SMTP:简单邮件传输协议
-
Telnet:远程登录协议
-
SNMP:简单网络管理协议
-
FTP:文件传输协议
-
TFTP:简单文件传输协议
-
NFS:网络文件系统协议
3.理解HTTP协议
HTTP(HyperText Transfer Protocol)协议是基于TCP的应用层协议,它不关心数据传输的细节,主要是用来规定客户端和服务端的数据传输格式,最初是用来向客户端传输HTML页面的内容。默认端口是80。
HTTP协议的特点
1.HTTP协议是无状态的
就是说每次HTTP请求都是独立的,任何两个请求之间没有什么必然的联系。但是在实际应用当中并不是完全这样的,引入了Cookie和Session机制来关联请求。
2.多次HTTP请求
在客户端请求网页时多数情况下并不是一次请求就能成功的,服务端首先是响应HTML页面,然后浏览器收到响应之后发现HTML页面还引用了其他的资源,例如,CSS,JS文件,图片等等,还会自动发送HTTP请求这些需要的资源。现在的HTTP版本支持管道机制,可以同时请求和响应多个请求,大大提高了效率。
3.基于TCP协议
HTTP协议目的是规定客户端和服务端数据传输的格式和数据交互行为,并不负责数据传输的细节。底层是基于TCP实现的。现在使用的版本当中是默认持久连接的,也就是多次HTTP请求使用一个TCP连接。
总结:
Socket与TCP还有HTTP之间,有着微妙的关联,剩下的靠自行体会了~
相关资料:
https://baike.baidu.com/item/socket/281150?fr=aladdin