TCP는 네트워크 계층 중 전송 계층에서 사용하는 프로토콜로서, 논리적인 연결을 설정하여 신뢰성을 보장하는 연결형 서비스 이다.
데이터를 전송하기 전에 신뢰성
을 위해 상대방 컴퓨터와 논리적인 연결을 수립하는 과정
상대방을 어떻게 식별할 수가 있나
=> TCP Header에 있는 컨트롤 비트 중 SYN
과 ACK
을 사용
=> client와 server 모두 상대방이 보낸 SYN값에 1을 더하여 ACK에 넣어서 보낸다
=> 이를 통해 내가 연결 요청을 보낸 상대방으로 부터 온 응답인지 확인할 수 있다!
client가 서버로 부터 FIN을 받았음에도 바로 CLOSED가 되지 않는 이유
=> FIN을 받자마자 CLOSED 된다면...
=> Server에서 FIN을 보내기 전에 보냈던 데이터가 네트워크 지연 같은 문제로 FIN요청보다 늦게 도착하는 경우 해당 데이터는 유실된다!
=> 이를 방지하기 위해 client는 FIN요청을 받더라도 일정시간 대기 후 CLOSED
패킷이 순서대로 서버에 도착하지 않아도 순서 보장을 할 수가 있는가?
=> TCP Header의 Sequence number
를 통해서 수신 측에서 패킷을 재조합하는 과정을 거친다!!
위 과정들을 통해서 TCP는 신뢰성 있는 통신을 제공한다.
TCP는 데이터를 보내고 그에 따른 응답 패킷(sequence number가 1 증가된)
을 받아야 제대로 전송되었다고 파악
-> 그렇지 않다면 패킷 재전송!! (네트워크 성능에 영향 미칠 수 있다)
UDP는 전송계층의 비연결형 프로토콜이다.
데이터를 주고받기 전에 논리적 연결하는 과정을 거치지 않는다.
이때문에 TCP에 비해 빠르지만, 전달의 신뢰성이 떨어진다.
TCP와 달리 패킷의 순서가 보장되지 않고, 유실되더라도 재전송 요청을 하지 않는다.