패킷(Packet)
이라는 통신 단위로 데이터 전달가상 연결
, 개념적 연결 ) 물리적 연결[ex랜선연결]이 X 직접연결 : 클라이언트 <--> 서버 간접연결 : 클라이언트 <--> 네트워크 노드 <--> 서버FIN
서버와 클라이언트가 연결된 상태에서 Client
close()를 호출하여 ‘접속을 끊겠다'는 신호를 보낸다. 이때 클라이언트는 서버에게 연결을 종료한다는 FIN
패킷를 보낸다.ACK
SERVER
서버는 FIN을 받고, 확인했다는 ACK를 클라이언트에게 보내고 자신의 통신이 끝날때까지 기다린다 서버는 클라이언트에게 응답을 보내고 CLOSE_WAIT상태에 들어간다. 이 상태에서 아직 남은 데이터가 있다면 전송을 마친 후에 close()를 호출한다. Client
서버에서 ACK를 받은 후에 서버가 남은 데이터를 처리를 끝내고 FIN 패킷을 보낼 때까지 기다린다. (FIN_WAIT_2)FIN
SERVER
데이터를 모두 보냈다면, 종료에 합의 한다는 의미로 FIN 패킷을 보낸다. (LAST_ACK)ACK
Client
서버로부터 FIN 을 받고, 확인했다는 ACK 를 서버에 보낸다. 서버로부터 받지 못한 데이터가 있을 수 있으므로 TIME_WAIT 를 통해 기다린다. SERVER
ACK를 받은 이후 소켓을 닫는다(Closed) Client
TIME_WAIT 시간이 끝나면 클라이언트도 소켓을 닫는다.사용자 데이터그램 프로토콜 (User Datagram Protocol)
같은 IP 내에서 프로세스를 구분
[IP- 아파트, PORT-몇동 몇호]
0~65545 할당 가능
0~1023 잘 알려진 포트, 사용하지 않는게 좋음
Domain Name System
IP는 변경될 수 있고, 외우기 어렵다 → DNS 사용
도메인 명을 IP 주소로 변환(전화번호부 같은 느낌)
ref.
4 way handshake
https://velog.io/@averycode/네트워크-TCPUDP와-3-Way-Handshake4-Way-Handshake