Socket programming
First, understand the network protocols: TCP/IP, sockets, HTTP, etc.
The network seven layer is from the bottom up to the physical layer, the data link layer, the network layer, the transport layer, the conversation layer, the presentation layer and the application layer respectively.
The physical layer, the data link layer and the network layer are often called media layers, which are the objects researched by network engineers.
The transport layer, the session layer, the presentation layer, and the application layer are referred to as the host layer and are the content that the user is looking for and cares about.
The HTTP protocol corresponds to the application layer
The TCP protocol corresponds to the transport layer
IP protocol corresponds to the network layer
The three are not comparable in nature. Moreover, the HTTP protocol is based on TCP connections.
TCP/IP is a Transport layer protocol that mainly addresses how data travels across the network, while HTTP is an application-layer protocol that addresses how data is packaged.
When we transmit data, we can use only the transport layer (TCP/IP), but in that case, because there is no application layer, the data content is not recognized, if you want to make the transferred data meaningful, you must use the Application layer protocol, the application layer protocol, there are HTTP, FTP, Telnet and so on, You can also define the application layer protocol yourself. The web uses HTTP as the Transport Layer protocol to encapsulate HTTP text information and then send it to the network using TCP/IP as the Transport layer protocol. Socket is the TCP/IP protocol encapsulation, the socket itself is not a protocol, but a call interface (API), through the socket, we can use the TCP/IP protocol.
Two, Http,Https and socket connection differences
I believe many of the novice mobile phone networking development friends want to know what is the difference between the HTTP and socket connection, hope that through their own shallow understanding can help beginners.
The Protocols of the TCP/IP five layer model are: application layer, Transport layer, network layer, data link layer and physical layer. Repeaters, hubs, and the twisted-pair that we usually say also work in the physical layer, bridges (which are now seldom used), Ethernet switches (two-tier switches), network cards (in fact the NIC is half working on the physical layer, half working at the data Link layer) at the data link layer; Routers, layer three switches on the network layer The transport layer is primarily a four-layer switch, and there are routers working on the four level.
The application layer in the TCP/IP protocol handles the functions of layers fifth, sixth, and seventh in the seven-tier model. The transport layer in the TCP/IP protocol is not always guaranteed to reliably transmit packets at the transport layer, and the seven-tier model can do so. The TCP/IP protocol also provides a choice called UDP (User Datagram Protocol). UDP does not guarantee reliable packet transmission.
TCP: For connection-oriented, reliable transmission (guaranteed data correctness, guaranteed data order), for transmitting large amounts of data (stream mode), slow, to establish a connection requires more overhead (time, system resources).
UDP: For non-connected, unreliable transmission, for transmitting small amounts of data (packet mode), fast.
TCP is a flow-mode protocol, and UDP is a datagram-mode protocol.
When transferring data, you can use only the transport layer (TCP/IP), but in that case, the data content cannot be recognized because there is no application layer, and if you want to make the transferred data meaningful, you must use the Application layer protocol (HTTP, FTP, Telnet, etc.) or you can define the application layer protocol yourself.
The web uses HTTP as the Transport Layer protocol to encapsulate HTTP text information and then send it to the network using TCP/IP as the Transport layer protocol. Socket is the TCP/IP protocol encapsulation, the socket itself is not a protocol, but a call interface (API), through the socket, we can use the TCP/IP protocol.
2.1. TCP connection
To understand the socket connection, you need to understand the TCP connection first. Mobile phone can use the network function is because the bottom of the mobile phone implementation of TCP/IP protocol, you can make the mobile phone terminal through the wireless network to establish a TCP connection. TCP protocol can provide an interface to the upper network, so that the transmission of the upper network data is based on the "No Difference" network.
Setting up a TCP connection requires a "three-time handshake":
First handshake: The client sends a SYN packet (SYN=J) to the server and enters the Syn_send state, waiting for the server to confirm;
Second handshake: The server receives the SYN packet, it must confirm the customer's SYN (ACK=J+1), and also send itself a SYN packet (syn=k), that is, the Syn+ack packet, when the server enters the SYN_RECV state;
Third handshake: The client receives the server's Syn+ack packet, sends the acknowledgment packet ack (ACK=K+1) to the server, the packet is sent, the client and the server enter the established state, and the handshake is completed three times.
The data is not included in the packets that are delivered during the handshake, and the client and server formally begin transmitting the data after the three handshake is complete. Three-time handshake (three-way handshake) When a TCP connection is established, the client and server are required to send a total of 3 packets. The purpose of the three-time handshake is to connect the server to the specified port, establish a TCP connection, and synchronize the serial number and confirmation number of both parties and Exchange TCP window size information. In socket programming, when the client executes connect (), three handshakes are triggered.
The data is not included in the packets that are delivered during the handshake, and the client and server formally begin transmitting the data after the three handshake is complete. Ideally, once a TCP connection is established, the TCP connection is maintained until either side of the communication actively closes the connection. When disconnected, both the server and the client can initiate a request to disconnect the TCP connection, and the disconnection process requires a "four-time handshake".
The removal of the TCP connection requires four packets to be sent, so it is called a four-time handshake (four-way handshake). In socket programming, either side performs a close () operation to generate a handshake (where there is a "wave") operation.
The difference between a "three-time handshake" and a "four-time handshake" is that the Syn+ack message can be sent directly when the server receives a SYN connection request message from the client side at the end of the connection. Where the ACK message is used to answer, the SYN message is used for synchronization. However, when the connection is closed, when the server side receives the fin message, it is likely that the socket will not be closed immediately, so you can only reply to an ACK message, tell the client side, "You send fin message I received." I can't send fin messages until all the messages on my server end are sent, so I can't send them together. Therefore, four-step handshake is required.
2.2. HTTP connection
The HTTP protocol, the Hypertext Transfer Protocol (Hypertexttransfer Protocol), is the foundation of Web networking and one of the most commonly used protocols for mobile networking, an application built on the TCP protocol.
The most notable feature of an HTTP connection is that each request sent by the client requires a server loopback response, and the connection is actively released after the request has ended. The process from establishing a connection to closing a connection is called a "one-time connection."
1) in HTTP 1.0, each request from the client requires a separate connection to be established, and the connection is automatically freed after the request is processed.
2) in HTTP 1.1, multiple requests can be processed in a single connection, and multiple requests can overlap, without waiting for a request to end before sending the next request.
Because HTTP is actively releasing the connection after each request ends, the HTTP connection is a "short connection", which requires constant connection requests to the server to maintain the client program's online status. As a general practice, there is no need to obtain any data immediately, and the client will keep a "keep-connected" request to the server at regular intervals, and the server responds to the client after receiving the request, indicating that the client is "online". If the server can not receive the client's request for a long time, it is considered that the client "offline", if the client cannot receive a reply from the server for a long time, it is considered that the network has been disconnected.
HTTPS (Hyper Text Transfer Protocol over secure Socket Layer) is a security-targeted HTTP channel and is a secure version of HTTP. The SSL layer is added under HTTP, and the security base of HTTPS is SSL, so the details of encryption require SSL. HTTPS has a default port that differs from HTTP and an encryption/authentication layer (between HTTP and TCP). The HTTP protocol sends content in plaintext, does not provide data encryption in any way, and if an attacker intercepts a transmission message between a Web browser and a Web server, it can read the information directly, so the HTTP protocol is not suitable for transmitting sensitive information.
HTTPS protocol requires a certificate to the CA, HTTP is a Hypertext Transfer Protocol, the information is plaintext transmission, HTTPS is a secure SSL Encryption transport protocol, HTTP and HTTPS use a completely different connection, the port is not the same, the former is 80, the latter is 443 The HTTP connection is simple and stateless, and the HTTPS protocol is a network protocol built by the SSL+HTTP protocol that can encrypt transmission and authentication.
Three, Socket principle
3.1. Socket (socket) concept
Socket (socket) is the cornerstone of communication and is the basic operating unit of network communication supporting TCP/IP protocol. It is an abstract representation of the endpoint in the network communication process and contains five kinds of information that must be used for network communication: the protocol that the connection uses, the IP address of the local host, the protocol port of the local process, the IP address of the remote host, and the protocol port of the remote process.
When the application layer communicates data through the transport layer, TCP encounters a problem that provides concurrent services for multiple application processes at the same time. Multiple TCP connections or multiple application processes may require data to be transmitted over the same TCP protocol port. To differentiate between different application processes and connections, many computer operating systems provide a socket (socket) interface for applications interacting with the TCP/IP protocol. The application layer can communicate with the transport layer through the socket interface, differentiate the communication from different application processes or network connections, and realize the concurrent service of data transmission.
3.2. Establish socket connection
Establishing a socket connection requires at least one pair of sockets, one running on the client, called Clientsocket, and the other running on the server side, called ServerSocket.
The connection between sockets is divided into three steps: Server listening, client request, connection acknowledgement.
Server monitoring: Server-side sockets do not locate specific client sockets, but are waiting for the status of the connection, real-time monitoring network status, waiting for the client connection request.
Client request: Refers to the client's socket to make a connection request, to connect to the target is the server-side socket. To do this, the client's socket must first describe the socket of the server it is connecting to, indicate the address and port number of the server-side socket, and then make a connection request to the server-side socket.
Connection confirmation: When a server-side socket hears or receives a connection request from a client socket, it responds to a client socket request, establishes a new thread, sends a description of the server-side socket to the client, and once the client confirms the description, the two sides formally establish the connection. While the server-side socket continues to be in the listening state, it continues to receive connection requests from other client sockets.
3.3. Socket connection and TCP connection
When you create a socket connection, you can specify the transport layer protocol used, which can support different transport layer protocols (TCP or UDP), which is a TCP connection when a connection is made using the TCP protocol.
3.4. Socket connection and HTTP connection
Since the socket connection is usually a TCP connection, once the socket connection is established, the communication parties can start sending data content to each other until the two sides are disconnected. However, in real network applications, the client-to-server communication often needs to traverse multiple intermediary nodes, such as routers, gateways, firewalls, and so on, most firewalls will turn off long inactive connections and cause the Socket connection to be disconnected, so it needs to be polled to tell the network that the connection is active.
The HTTP connection uses a "request-response" approach, not only to establish a connection at the time of the request, but also to be able to reply to the server after the client has made a request to the server.
In many cases, the server side is required to proactively push data to the client, keeping the client and server data in real time and in sync. At this point, if the two sides established a socket connection, the server can directly transfer the data to the client, if the two sides establish an HTTP connection, the server needs to wait until the client sends a request before the data can be sent back to the client, so the client periodically sends a connection request to the server, not only to remain online, It also asks the server if there is any new data, and if so, it passes the data to the client.
iOS Development-socket Programming