인터넷 통신을 하기 위해서는 네트워크 기본 지식이 필요하다
그 이유로는 요청을 보내는 클라이언트와 요청을 받는 서버가 바로 옆에 붙어있지 않으므로
중간에 인터넷 망이 있어 데이터를 안전하게 전송하기 위한 방법이 필요하다
IP(Internet Protocol)란 osi 7계층중 3계층인 네트워크 계층에 속하며
인터넷에서 컴퓨터간에 데이터의 전송이 이루어지는 경우 이러한 데이터 통신에 대한
규약이 IP다.
클라이언트와 서버에 ip 주소를 이용하여 원하는 대상을 주소로 식별하여
데이터를 전달할 수 있게 된다.
패킷이라는 통신 단위로 데이터를 전달하는데
IP패킷에는 출발지 IP와 목적지 IP, 전송하는 데이터등이 포함되어 있다.
패킷 구조

위의 IP프로토콜의 한계점을 해결해줄 osi 7계층의 4계층 전송계층에 속해있으며
연결지향형이다


와이어샤크에서 어느 사이트를 접속했을때 SYN,(SYN,ACK),ACK로 3way handshake를 하는 것이
확인 가능하다.
3way handshake란 클라이언트가 서버로 연결 요청인 SYN을 보내고
서버에서 연결 요청에 대한 응답인 ACK와 연결 확립 요청을 보내게 된다.
이후 클라이언트에서 다시 연결에 대한 응답을 보내며 데이터를 전송한다.
데이터 전달 보증
클라이언트에서 서버로 데이터 전송 시 서버에서 데이터를 잘 받았다라는 응답 ACK를
날려줘서 데이터가 전달 여부를 확인할 수 있다.
순서 보장
순서가 꼬여서 도착한 경우 어느 부분부터 다시 보내라라고 요청을 보낼 수 있다.
흐름 제어 및 혼잡 제어
위의 특징들을 이용할 수 있는 이유는 tcp 세그먼트 덕분이다.
세그먼트안에는 출발지 port와 목적지 port, 전송 제어 정보,순서 정보, 검증 정보들이
포함되어 있다
Port란?
하나의 컴퓨터에서 여러 개의 서버를 사용 시 어느 서버에 접속해야하는지 알 수 있는 방법이
Port다.
Port는 프로토콜 별로 다르다
Port는 0~65535로 할당 가능하며
0~1023은 Well Known Port (유명 서버, 특정 서버)
1024~49151은 Registered Port (등록된 포트)
49152~65535는 Dynamic Port (일반 사용자들이 자유롭게 사용 가능)
4way handshake란
연결을 종료하기 위해 수행되는 절차로

클라이언트가 서버에 연결을 종료하겠다는 FIN플래그를 전송하고
클라이언트는 FIN-WAIT 상태가 된다.
서버에서 FIN플래그를 받고 응답메시지 ACK를 날리고 통신이 끝날 때까지 기다린다.
(CLOSE_WAIT) 상태
이후 연결을 종료할 준비가 되면 연결을 종료하기 위한 FIN플래그를 클라이언트에게
전송한다. (Last_ACK)
클라이언트는 해지 준비가 되었나는 ACK 메시지를 날리고
TIME_WAIT 상태가 된다 이 상태가 되는 이유는 클라이언트에서 세션 종료 후
늦게 도착하는 패킷에 대하여 DROP이 되지 않게 기다리는 과정이다.
TCP처럼 연결 지향적이지도 않으며 기능이 거의 없고
데이터 전달도 보장안하고 순서도 보장하지 않는다.
그런데 왜 사용하는가?
속도가 빠르기 때문에 빠른 응답속도가 중요한 게임에서 많이 사용된다.
IP와 거의 같지만 위에서 설명한 Port와 체크섬 정도만 추가되었다.
애플리케이션에서 추가 작업을 해야한다.
체크섬이란?
데이터의 무결성을 제공하기 위해서 네트워크를 통해 전달되는 값이 변경되었는지
검사하는 값이다.