인캡슐레이션 / 디캡슐레이션 과정에서 추가되는 정보중 가장 중요한 두 가지는 상위 프로토콜 지시자 정보 / 각 계층에서 정의하는 정보
상위 프로토콜 지시자 - 디캡슐레이션 과정에서 상위 계층의 프로토콜이나 프로세스를 정확히 찾아가기 위한 목적으로 사용됨
TCP 프로토콜 - Transmission Control Protocol
신뢰할 수 없는 공용망에서도 정보유실 없는 통신을 보장하기 위해 세션을 안전하게 연결하고 데이터를 분할하고 분할된 패킷이 잘 전송되었는지 확인하는 기능이 있음
패킷에 번호를 부여하고 잘 전송되었는지에 대해 응답
수신자가 잘 받아 처리할 수 있는지 전송 크기까지 고려하여 통신
패킷 순서, 응답 번호
패킷 순서를 부여하는 것 - 시퀀스 넘버
응답 번호를 부여하는 것 - ACK 번호(응답 번호)
두 번호가 상호작용하여 순서나 손실을 파악할 수 있음 - 송신자가 1번 전송하면 수신자가 1번을 받고 1번을 받았으니 다음번호 2번을 달라는 의미로 ACK 2를 송신자한테 전송함
데이터를 보낼때 패킷을 하나만 보내는 것이 아니라 많은 패킷을 한꺼번에 보내고 응답을 하나만 받음
윈도 사이즈 : 한 번에 받을 수 있는 데이터 크기 - 최대 크기 2의 16승 - 64k
슬라이딩 윈도 : 네트워크 상황에 따라 윈도 사이즈를 조절하는 것
데이터 유실이 발생하면 윈도우 사이즈를 반으로 줄이고 정상적으로 통신이 되면 서서히 하나씩 다시 늘림
네트워크 경합을 피하기위해 회선 속도 증가 / 버퍼가 큰 네트워크 장비 사용 / TCP 최적화 솔루션 사용
3방향 핸드셰이크
TCP에서는 3번의 패킷을 주고 받으면서 통신을 서로 준비하므로 3방향 핸드셰이크라 부름
준비가 되지 않은 상태에서 보낸 패킷은 버려짐
LISTEN : 서버에서 클라이언트의 접속을 받아들일 수 있는 대기 상태
SYN-SENT : 클라이언트에서 통신을 시도할 때 Syn 패킷을 보내는 클라이언트의 상태
SYN-RECEIVE : Syn을 받은 서버의 상태, Syn와 Ack로 응답
ESTABLISHED : Syn, Ack 응답을 받은 클라이언트 상태, 그에 대한 응답을 서버로 보냄 → 서버도 ESTABLISHED 상태로 변경 - 서버와 클라이언트가 연결이 성공적으로 완료되었음
플래그
어떤 패킷이 새로운 연결 시도이고 기존 통신에 대한 응답인지 구분하기 위해 헤더에 넣는 값
SYN : 연결 시작용도
ACK : ACK 번호가 유효한지, 초기 SYN이 아닌 모든 패킷은 기존 메시지에 대한 응답이므로 ACK 플래그가 1로 표시
FIN : 연결 종료 - 정상적인 양방향 종료
RST : 연결 종료 - 연결 강제 종료의 일방적 종료
URG : 긴급 데이터 여부
PSH : 서버 측에서 전송할 데이터가 없거나 데이터를 버퍼링 없이 응용 프로그램으로 즉시 전달할 것을 지시할 때 사용
UDP 프로토콜 - User Datagram Protocol
음성 데이터나 실시간 스트리밍과 같이 시간에 민감한 프로토콜, 애플리케이션을 사용하는 경우, 사내 방송이나 증권 시세데이터 전송에 사용되는 멀티캐스트처럼 단방향으로 다수의 단말과 통신해 응답받기 어려운 환경에서 주로 사용
UDP는 중간에 데이터가 일부 유실되어도 그냥 유실된 채로 데이터 처리 - 유실된 데이터를 복구하기 위해 멈추면 네트워크 품질이 떨어진다고 생각함 - 오류제어, 흐름제어 안함
UDP 프로토콜을 사용하는 애플리케이션은 TCP로 사전연결만 한뒤 실제 데이터만 UDP 프로토콜을 이용함